增加并发数后,TPS增加, IOPS却下降现象分析

阅读 312

环境准备

Ecs规格:ecs.g6. xlarge(4C16G)

centos7.6

数据库规格:rds.mysql.s3.large(4C8G)

mysql 5.7

参数配置

o sync_binlog=1、innodb_flush_log_at_trx_commit=1:确保每次提交的数据完整写入磁盘中。

o   rpl_semi_sync_master_enabled=ON:开启数据库半同步模式,保证主备库数据的一致性。

o   Performance_schema=ON:内存大于等于8 GB的实例规格默认开启Performance Schema


测试工具:SysBench 1.0.20


安装测试工具


在ECS实例执行如下命令安装SysBench。

yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql

git clone https://github.com/akopytov/sysbench.git

##从Git中下载SysBench

cd sysbench

##打开SysBench目录

git checkout 1.0.20

##切换到SysBench 1.0.20版本

./autogen.sh

##运行autogen.sh

./configure --prefix=/usr --mandir=/usr/share/man

make

##编译

make install


1,构建数据


数据量:80*100000

sysbench --db-driver=mysql --mysql-host=rm-bp15ffqrv1s4d63bq.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=zt --mysql-password=Aliyun2021 --mysql-db=wjk --table_size=100000 --tables=80 --events=0 --time=120  oltp_read_write prepare

2、压测并发4个线程

TPS 500

IOPS 4000

3、压测并发8个线程

Tps 1100

Iops 3800


4、压测 并发80个线程

Tps 2100

Iops 860


5、压测 并发600个线程

Tps 2100

Iops 350


6、分析原因

设置了innodb_flush_log_at_trx_commit =1, 也就是每次事务提交前都要刷盘, 每次刷盘是把整个innodb_log_buffer都写入redo里面(包括其它事务), 所以并发增加后, 每次刷盘所包含的事务也就更多了(total次数减少), 数据量也大了(avg_written增大). 宏观来看就是写iops减少了. 那是不是并发越多性能越好呢, 肯定不是, 本次实验600并发的时候TPS已经开始降下来了, 连接本身占用的资源就多, 应该是个正态分布.

7、结论

并发数越多, IO利用率越高(iops越低). 主要是redo log的原因.

文章来源:网络 版权归原作者所有,如涉及知识产权问题,请权利人联系我们,我们将立即处理.
标签:
专栏:   Web服务器
文章 获得 个赞 共 个粉丝

推荐阅读 更多精彩内容