跳转至

如何使用 Sysbench 对 Mysql进行压力测试?


2018-05-17 by dongnan

目标

使用 sysbench 工具,对阿里云 RDS Mysql云数据库进行压力测试。

概念

测试关注两个指标:

  • QPS, Queries Per Second,即数据库每秒执行的SQL数(含insert、select、update、delete等)。
  • TPS, Transactions Per Second,即数据库每秒执行的事务数,以 commit成功次数为准。

环境

sysbech 0.5 版本,安装请参考这里

地域
金融云. 华东 1可用区B/D

ECS
配置: ecs.sn2.medium / 2vCPU /8GB(I/O优化) / CentOS 7.4 amd64
IP: 10.2xx.1xx.2x

RDS
配置: rds.mysql.s2.large ,高可用版.通用型: 2核/4GB内存/80GB SSD存储/IOPS:2000/最大连接数:1200/ MySQL 5.6
IP: rm-bxxxxxxxx8.mysql.rds.aliyuncs.com

测试步骤

使用 16个线程,创建 32张表格,每个表格 100W条数据。

准备数据

sysbench --num-threads=16 --oltp-tables-count=32 \
    --test=oltp.lua --oltp-table-size=1000000  \
    --db-driver=mysql --mysql-table-engine=innodb \
    --mysql-host=rm-bxxxxxxxx8.mysql.rds.aliyuncs.com \
    --mysql-port=3306 --mysql-user=test-user --mysql-password=test-passwd \
    prepare

sysbench 0.5:  multi-threaded system evaluation benchmark

Creating table 'sbtest-user'...
Inserting 1000000 records into 'sbtest-user'
Creating secondary indexes on 'sbtest-user'...
# ...省略
Inserting 1000000 records into 'sbtest32'
Creating secondary indexes on 'sbtest32'... 

压测性能

sysbench --num-threads=16 --oltp-tables-count=32 \
    --max-time=600 --max-requests=0 \
    --test=oltp.lua --oltp-table-size=1000000 \
    --db-driver=mysql --mysql-table-engine=innodb \
    --mysql-host=rm-bxxxxxxxx8.mysql.rds.aliyuncs.com \
    --mysql-port=3306 --mysql-user=test-user --mysql-password=test-passwd \
    run

sysbench 0.5:  multi-threaded system evaluation benchmark
# ...省略
OLTP test statistics:
    queries performed:
        read:                            2949716
        write:                           842776
        other:                           421388
        total:                           4213880
    transactions:                        210694 (351.13 per sec.)
    read/write requests:                 3792492 (6320.38 per sec.)
    other operations:                    421388 (702.26 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0415s
    total number of events:              210694
    total time taken by event execution: 9599.9833s
    response time:
         min:                                 34.58ms
         avg:                                 45.56ms
         max:                                273.42ms
         approx.  95 percentile:              55.85ms

Threads fairness:
    events (avg/stddev):           13168.3750/1118.95
    execution time (avg/stddev):   599.9990/0.01 

清理数据

sysbench --num-threads=16 --oltp-tables-count=32 \
    --max-time=600 --max-requests=0 \
    --test=oltp.lua --oltp-table-size=1000000 \
    --db-driver=mysql --mysql-table-engine=innodb \
    --mysql-host=rm-bxxxxxxxx8.mysql.rds.aliyuncs.com \
    --mysql-port=3306 --mysql-user=test-user --mysql-password=test-passwd \
    cleanup

sysbench 0.5:  multi-threaded system evaluation benchmark

Dropping table 'sbtest-user'...
# ...省略
Dropping table 'sbtest32'... 

测试结果

sysbench 的结果: QPS:6320, TPS: 351 。

RDS 控制台的结果: QPS:7188,TPS:359 。

rds-cpu

rds-iops

rds-qps-tps

小结

  • 从测试结果来看,CPUIOPS 分别达到最大值,成为瓶颈。
  • 测试结果超预期,OPSTPS 远高于 rds.mysql.s2.large 接近 rds.mysql.s3.large

命令参数

  • --mysql-table-engine:指定存储引擎,如myisam,innodb,heap,ndbcluster,bdb,maria,falcon,pbxt
  • --mysql-db:指定在哪个数据库创建测试表,默认为sbtest库,需要提前创建好。
  • --test:指定Lua脚本,参数选项大部分同老版本的--test=oltp help 。
  • --db-driver:指定驱动,默认为Mysql 。
  • --oltp-secondary:测试表将使用二级索引KEY xid (ID) 替代 PRIMARY KEY (ID),innodb引擎内部为每个表 创建唯一6字节的主键索引 。
  • --oltp-auto-inc:设置id列为auto-incremental,值为on或off,默认为on 。
  • --oltp-table-size:指定表的大小,即表的行数 。
  • --oltp-dist-type:指定随机取样类型,默认为special,允许的值:uniform、gauss、special 。
  • --oltp-dist-pct:记录读取百分比 。
  • --oltp-dist-res:分配的概率 。
  • --oltp-read-only:执行仅仅SELECT测试,默认off 。
  • --oltp-tables-count: 创建多个表,默认为1 。
  • --num-threads:指定并发线程数,每个线程将选择一个随机的表 --oltp-tables-count 的数量应该是 --num-threads 的倍数。
  • 如果使用--max-time(这里设置600s),需要设置--max-request为0,默认是10000(总请求数) 。

参考

  • sysbench 之 IO基准测试
  • https://my.oschina.net/anthonyyau/blog/290030
  • https://www.cnblogs.com/kunpengv5/p/7477614.html
  • https://help.aliyun.com/document_detail/53635.html?spm=a2c4g.11186623.6.784.fMGG2I

欢迎关注微信公众号: 运维录

Back to top