本文介绍RDS MySQL实例性能测试的方法。
前提条件
背景信息
实例性能测试的指标包括:
- 每秒执行事务数TPS(Transactions Per Second)
数据库每秒执行的事务数,以COMMIT成功次数为准。
- SysBench标准OLTP读写混合场景中一个事务包含18个读写SQL。
- SysBench标准OLTP只读场景中一个事务包含14个读SQL(10条主键点查询、4条范围查询)。
- SysBench标准OLTP只写场景中一个事务包含4个写SQL(2条UPDATE、1条DETELE、1条INSERT)。
- 每秒执行请求数QPS(Queries Per Second)
数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE、COMMIT等。
SysBench参数说明
| 参数 | 说明 |
| db-driver | 数据库引擎。 |
| mysql-host | RDS实例连接地址。 |
| mysql-port | RDS实例连接端口。 |
| mysql-user | RDS实例账号。 |
| mysql-password | RDS实例账号对应的密码。 |
| mysql-db | RDS实例数据库名。 |
| table_size | 测试表大小。 |
| tables | 测试表数量。 |
| events | 测试请求数量。 |
| time | 测试时间。 |
| threads | 测试线程数。 |
| percentile | 需要统计的百分比,默认值为95%,即请求在95%的情况下的执行时间。 |
| report-interval | 表示N秒输出一次测试进度报告,0表示关闭测试进度报告输出,仅输出最终的报告结果。 |
| skip-trx | 是否跳过事务。
|
性能测试步骤
本文以CentOS系统为例,演示性能测试的步骤。
- 登录ECS实例,通过如下步骤安装SysBench。
sudo yum install gcc gcc-c++ autoconf automake make libtool mysql-devel git mysql git clone https://github.com/akopytov/sysbench.git ##从Git中下载Sysbench cd sysbench ##打开sysbench目录 git checkout 1.0.18 ##切换到sysbench 1.0.18版本 ./autogen.sh ##运行autogen.sh ./configure --prefix=/usr --mandir=/usr/share/man make ##编译 make install - 进行性能测试,包括OLTP读写混合场景压测、OLTP只读场景压测和OLTP只写场景压测。
- OLTP读写混合场景压测
参见如下命令进行测试,参数说明请参见SysBench参数说明。
##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX oltp_read_write prepare ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run ##清理数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 oltp_read_write cleanup测试结果示例如下:
- QPS:23869.32
- TPS:1193.47
- 响应时间(RT):36.89 ms
[ 55s ] thds: 16 tps: 1238.00 qps: 24720.98 (r/w/o: 17294.99/4951.00/2475.00) lat (ms,95%): 35.59 err/s: 0.00 reconn/s: 0.00 [ 56s ] thds: 16 tps: 1195.00 qps: 23924.02 (r/w/o: 16752.01/4782.00/2390.00) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00 [ 57s ] thds: 16 tps: 1235.00 qps: 24714.10 (r/w/o: 17308.07/4935.02/2471.01) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00 [ 58s ] thds: 16 tps: 1230.99 qps: 24594.83 (r/w/o: 17205.88/4926.97/2461.98) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00 [ 59s ] thds: 16 tps: 1187.00 qps: 23786.05 (r/w/o: 16655.03/4757.01/2374.00) lat (ms,95%): 36.89 err/s: 0.00 reconn/s: 0.00 [ 60s ] thds: 16 tps: 1212.00 qps: 24252.93 (r/w/o: 16964.95/4863.99/2423.99) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00 SQL statistics: queries performed: read: 1003268 write: 286648 other: 143324 total: 1433240 transactions: 71662 (1193.47 per sec.) queries: 1433240 (23869.32 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 60.0439s total number of events: 71662 Latency (ms): min: 4.48 avg: 13.40 max: 142.82 95th percentile: 36.89 sum: 960169.64 Threads fairness: events (avg/stddev): 4478.8750/88.00 execution time (avg/stddev): 60.0106/0.00 - OLTP只读场景压测
参见如下命令进行测试,参数说明请参见SysBench参数说明。
##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX oltp_read_only prepare ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 --skip-trx=1 --report-interval=1 oltp_read_only run ##清理数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 oltp_read_only cleanup测试结果示例如下:
- QPS:26130.73
- 响应时间(RT):33.72 ms
[ 55s ] thds: 16 tps: 1881.00 qps: 26417.97 (r/w/o: 26417.97/0.00/0.00) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00 [ 56s ] thds: 16 tps: 1831.01 qps: 25564.09 (r/w/o: 25564.09/0.00/0.00) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00 [ 57s ] thds: 16 tps: 1914.99 qps: 26829.90 (r/w/o: 26829.90/0.00/0.00) lat (ms,95%): 33.12 err/s: 0.00 reconn/s: 0.00 [ 58s ] thds: 16 tps: 1930.00 qps: 27013.02 (r/w/o: 27013.02/0.00/0.00) lat (ms,95%): 33.12 err/s: 0.00 reconn/s: 0.00 [ 59s ] thds: 16 tps: 1901.00 qps: 26569.06 (r/w/o: 26569.06/0.00/0.00) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00 [ 60s ] thds: 16 tps: 1933.99 qps: 27157.92 (r/w/o: 27157.92/0.00/0.00) lat (ms,95%): 33.12 err/s: 0.00 reconn/s: 0.00 SQL statistics: queries performed: read: 1568952 write: 0 other: 0 total: 1568952 transactions: 112068 (1866.48 per sec.) queries: 1568952 (26130.73 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 60.0410s total number of events: 112068 Latency (ms): min: 3.03 avg: 8.57 max: 84.14 95th percentile: 33.72 sum: 960237.13 Threads fairness: events (avg/stddev): 7004.2500/96.69 execution time (avg/stddev): 60.0148/0.01 - OLTP只写场景压测
参见如下命令进行测试,参数说明请参见SysBench参数说明。
##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX oltp_write_only prepare ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run ##清理数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=100 --events=0 --time=300 --threads=XXX --percentile=95 oltp_write_only cleanup测试结果示例如下:
- TPS:4255.01
- 响应时间(RT):16.71 ms
[ 56s ] thds: 16 tps: 4458.17 qps: 26789.02 (r/w/o: 0.00/17871.68/8917.34) lat (ms,95%): 14.21 err/s: 0.00 reconn/s: 0.00 [ 57s ] thds: 16 tps: 4416.02 qps: 26472.15 (r/w/o: 0.00/17640.10/8832.05) lat (ms,95%): 16.41 err/s: 0.00 reconn/s: 0.00 [ 58s ] thds: 16 tps: 3919.11 qps: 23508.64 (r/w/o: 0.00/15670.43/7838.21) lat (ms,95%): 17.63 err/s: 0.00 reconn/s: 0.00 [ 59s ] thds: 16 tps: 4089.00 qps: 24559.02 (r/w/o: 0.00/16381.01/8178.01) lat (ms,95%): 18.28 err/s: 0.00 reconn/s: 0.00 [ 60s ] thds: 16 tps: 4353.28 qps: 26100.68 (r/w/o: 0.00/17394.12/8706.56) lat (ms,95%): 19.65 err/s: 0.00 reconn/s: 0.00 SQL statistics: queries performed: read: 0 write: 1021552 other: 510776 total: 1532328 transactions: 255388 (4255.01 per sec.) queries: 1532328 (25530.04 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 60.0192s total number of events: 255388 Latency (ms): min: 1.28 avg: 3.76 max: 182.50 95th percentile: 16.71 sum: 959762.69 Threads fairness: events (avg/stddev): 15961.7500/525.08 execution time (avg/stddev): 59.9852/0.00
说明 SysBench工具有很多标准压测模型,您可以根据自己的业务场景选择合适的模型使用。 - OLTP读写混合场景压测
该文章对您有帮助吗?