tpcc-mysql 是 Percona 开源的一个对 MySQL 进行 tpc-c 基准测试的工具,本文主要介绍 tpcc-mysql 的安装、使用和结果解读。
一、安装 tpcc-mysql
tpcc-mysql 是一个开源的工具,代码托管在 github 上,下载源码,编译安装。本文测试使用的环境是 CentOS 7.2。
git clone https://github.com/Percona-Lab/tpcc-mysql
cd tpcc-mysql/src
make
编译完成,会在源码根目录生成两个可执行文件:
- tpcc_load
- tpcc_start
tpcc_load 用于测试数据的加载。
tpcc_start 用于启动 tpcc 测试。
注意:
如果在编译过程中提示缺少依赖的头文件或者动态库,那么需要安装 mysql 相关的一些依赖包,比如:
- Percona-Server-devel-57-5.7.19-17.1.el6.x86_64.rpm
- Percona-Server-shared-57-5.7.19-17.1.el6.x86_64.rpm
二、加载测试数据
2.1 创建数据库
在测试的 MySQL 实例上创建数据库,比如库名为 tpcc。
mysql -h 127.0.0.1 -u admin -p'password' -e "create database tpcc";
2.2 创建测试表和索引
mysql -h 127.0.0.1 -u admin -p'password' tpcc < create_table.sql
mysql -h 127.0.0.1 -u admin -p'password' tpcc < add_fkey_idx.sql
create_table.sql 和 add_fkey_idx.sql 位于 tpcc-mysql 源码的根目录下。
2.3 加载测试数据
./tpcc_load -h 127.0.0.1 -d tpcc -u admin -p'password' -w 100
- -h,指定数据库IP
- -u,指定连接数据库的用户名
- -p,指定连接数据库的密码
- -d,指定数据库名称
- -w,指定仓库数量,这是 tpc-c 测试很重要的一个参数
如果指定的 -w 参数非常大,测试数量也就非常大,加载测试数据会消耗很大时间,在 tpcc-mysql 的根目录下提供了一个并行加载测试数据的脚本 load.sh,示例如下:
sh load.sh tpcc 100
三、测试 tpc-c
执行 tpcc_start 程序,测试 tpc-c,示例如下:
./tpcc_start -h127.0.0.1 -dtpcc -uadmin -p'password' -w100 -c32 -r10 -l3600
常用参数解释:
- -h,指定数据库IP
- -u,指定连接数据库的用户名
- -p,指定连接数据库的密码
- -w,指定仓库数量
- -c,指定并发连接数
- -r,指定预热时间
- -l,指定运行时间
- -i,指定输出报告的时间间隔
四、测试结果解析
tpcc-mysql 测试结果通常如下:
10, trx: 12920, 95%: 9.483, 99%: 18.738, max_rt: 213.169, 12919|98.778, 1292|101.096, 1293|443.955, 1293|670.842
20, trx: 12666, 95%: 7.074, 99%: 15.578, max_rt: 53.733, 12668|50.420, 1267|35.846, 1266|58.292, 1267|37.421
30, trx: 13269, 95%: 6.806, 99%: 13.126, max_rt: 41.425, 13267|27.968, 1327|32.242, 1327|40.529, 1327|29.580
40, trx: 12721, 95%: 7.265, 99%: 15.223, max_rt: 60.368, 12721|42.837, 1271|34.567, 1272|64.284, 1272|22.947
50, trx: 12573, 95%: 7.185, 99%: 14.624, max_rt: 48.607, 12573|45.345, 1258|41.104, 1258|54.022, 1257|26.626
- 第一列表示测试执行的时间,单位秒。
- trx: 12920 表示在给定的时间间隔内,新订单的事务数,这个值越大越好。
- 95%: 9.483 表示在给定的时间间隔内,新订单的 95% 的响应时间在 9.483 之内。
- 99%: 18.738 表示在给定的时间间隔内,新订单的 99% 的响应时间在 18.738 之内。
- max_rt: 213.169,表示在给定的时间间隔内,新订单事务的最大响应时间。
- 剩下的 12919|98.778, 1292|101.096, 1293|443.955, 1293|670.842,是其他类型事务的吞吐量和最大响应时间,可以忽略。
在执行完成后,会生成一个最终的结果,如下:
[0] sc:0 lt:313 rt:0 fl:0 avg_rt: 121.8 (5)
[1] sc:0 lt:314 rt:0 fl:0 avg_rt: 27.1 (5)
[2] sc:0 lt:32 rt:0 fl:0 avg_rt: 11.8 (5)
[3] sc:0 lt:31 rt:0 fl:0 avg_rt: 223.6 (80)
[4] sc:0 lt:31 rt:0 fl:0 avg_rt: 516.1 (20)
in 60 sec.
[0] sc:0 lt:313 rt:0 fl:0
[1] sc:0 lt:314 rt:0 fl:0
[2] sc:0 lt:32 rt:0 fl:0
[3] sc:0 lt:31 rt:0 fl:0
[4] sc:0 lt:31 rt:0 fl:0
(all must be [OK])
[transaction percentage]
Payment: 43.55% (>=43.0%) [OK]
Order-Status: 4.44% (>= 4.0%) [OK]
Delivery: 4.30% (>= 4.0%) [OK]
Stock-Level: 4.30% (>= 4.0%) [OK]
[response time (at least 90% passed)]
New-Order: 0.00% [NG] *
Payment: 0.00% [NG] *
Order-Status: 0.00% [NG] *
Delivery: 0.00% [NG] *
Stock-Level: 0.00% [NG] *
313.000 TpmC
其中比较重要的是 TpmC,每分钟事务数,该值越大越好。其他的比如 transaction percentage 和 response time 状态必须都要是 OK 才能通过测试。