dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:457回复:1

如何使用 sysbench 对 RDS进行压力测试?

楼主#
更多 发布于:2018-05-17 10:08
目标
使用 sysbench 工具,对阿里云 RDS Mysql数据库进行压力测试。

概念
测试结果有两个指标:
QPS, Queries Per Second,即数据库每秒执行的SQL数(含insert、select、update、delete等)。
TPS, Transactions Per Second,即数据库每秒执行的事务数,以commit成功次数为准。

环境
1. 地域
    金融云. 华东 1可用区B/D
2. ECS
    配置: ecs.sn2.medium / 2vCPU /8GB(I/O优化) / CentOS 7.4 amd64
    IP: 10.2xx.1xx.2x
    sysbech 0.5 版本,安装请参考这里
2. 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条数据。

1. 准备数据
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'...

2. 压测性能
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

3. 清理数据
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

图片:sysbench-rds-cpu.png



rds-iops

图片:sysbench-rds-iops.png



rds-qps-tps

图片:sysbench-rds-qps-tps.png



小结
1. 从测试结果来看,CPU 与 IOPS 分别达到最大值,成为瓶颈
2. 测试结果超预期,OPS 与 TPS 远高于 rds.mysql.s2.large 接近 rds.mysql.s3.large 。

sysbench  参数
--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
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2018-05-17 10:21
rds.mysql.s2.xlarge QPS/TPS
扩展: rds.mysql.s2.xlarge ,高可用版.通用型: 9核/6GB内存/80GB SSD存储/IOPS:3000/最大连接数:1500/ MySQL 5.6

1. 运行命令
sysbench --num-threads=96 --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

Running the test with following options:
Number of threads: 96
Random number generator seed is 0 and will be ignored

Initializing worker threads...

Threads started!

OLTP test statistics:
    queries performed:
        read:                            9578198
        write:                           2736628
        other:                           1368314
        total:                           13683140
    transactions:                        684157 (1140.11 per sec.)
    read/write requests:                 12314826 (20521.94 per sec.)
    other operations:                    1368314 (2280.22 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0811s
    total number of events:              684157
    total time taken by event execution: 57603.6749s
    response time:
         min:                                 49.12ms
         avg:                                 84.20ms
         max:                                482.27ms
         approx.  95 percentile:             100.91ms

Threads fairness:
    events (avg/stddev):           7126.6354/324.62
    execution time (avg/stddev):   600.0383/0.02

2. 测试结果
OPS: 22758 /  TPS: 1137
rds-extend-cpu

图片:rds-extend-cpu.png


rds-extend-qps-tps

图片:rds-extend-qps-tps.png



OPS 与 TPS 远高于 rds.mysql.s2.xlarge 接近 rds.mysql.c1.xlarge 。

参考
https://help.aliyun.com/document_detail/53637.html
游客

返回顶部