tpcc-mysql 安装与使用

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,是其他类型事务的吞吐量和最大响应时间,可以忽略。

在执行完成后,会生成一个最终的结果,如下:

<Raw Results>
  [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.

<Raw Results2(sum ver.)>
  [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

<Constraint Check> (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] *

<TpmC>
                 313.000 TpmC

其中比较重要的是 TpmC,每分钟事务数,该值越大越好。其他的比如 transaction percentage 和 response time 状态必须都要是 OK 才能通过测试。

文章评论

0条评论