tpcc-mysql使用及输出结果解读

转自 http://msjun825.blog.163.com/blog/static/1237727462013323818167/ 

tpcc-mysql是percona实现的一种对mysql进行TPC-C基准测试的工具,TPC-C是一种测试计算机性能的标准,性能包括计算机硬件/软件/数据库及其它方面的整体性能,详情请参考 http://www.tpc.org/tpcc/。TPC-C测试模型主要是模拟一个大型销售公司的业务状况,因此tpcc-mysql测试一个重要的参数就是仓库数目。

1. 下载源码编译安装
yum install bzr或者sudo apt-get install bzr(适用于Ubuntu或其它Debian衍生版本)
bzr branch lp:~percona-dev/perconatools/tpcc-mysql
cd src
make 生成tpcc_load/tpcc_start两个二进制可执行脚本

2. 开始测试
2.1 创建测试所需的数据库及表:
mysql -uroot -proot -e 'create database tpcc'  //-u -p改成你自己mysql的用户名和密码
mysql -uroot -proot tpcc < create_table.sql
mysql -uroot -proot tpcc < add_fkey_idx.sql

2.2 创建表内容
./tpcc_load 127.0.0.1 tpcc root root 2
主要参数是最后一个,2表示创建两个仓库(参见TPC-C测试标准),如果仓库数目比较大,命令可能需要数小时完成。

2.3 开始测试
./tpcc_start -h 127.0.0.1 -d tpcc -u root -p root -w 2 -c 16 -r 10 -l 60 -i 10 -f report -t trx
tpcc-mysql测试主要可变参数是仓库数目(-w参数指定,必须和tpcc_load的一致)和connect数目(-c参数指定,可认为其代表线程数) -f report和-t trx表示生成测试文件,下面会详解其内容。

3. 输出结果
3.1 控制台输出
  10, 2035(3):4.732|5.339, 2034(0):0.895|1.461, 204(0):0.467|1.533, 204(0):5.540|5.714, 203(0):16.656|16.988
  20, 1909(5):4.816|5.704, 1911(0):0.901|2.516, 190(0):0.453|0.566, 191(0):5.524|6.946, 190(0):16.627|16.857
  30, 2046(3):4.754|5.195, 2046(0):0.905|1.305, 205(0):0.431|0.468, 204(0):5.487|5.936, 207(0):16.720|17.675
  40, 2032(1):4.725|5.094, 2032(0):0.897|1.046, 203(0):0.473|0.496, 203(0):5.517|5.593, 202(0):16.665|16.810
  50, 1846(8):4.767|5.396, 1852(0):0.904|1.070, 186(0):0.467|0.477, 185(0):5.604|5.694, 193(0):16.602|17.334
  60, 1966(2):4.712|5.063, 1958(0):0.887|1.403, 195(0):0.436|0.449, 195(0):5.458|5.591, 188(0):16.235|16.498
/***
上面第一行解释:10表示timestamp, ”2035(3):4.732|5.339“表示这10s内2035笔新订单业务在5s内完成,20笔新订单超过5s才完成,90%的新订单在4.732s内完成,新订单最大完成时间是5.339s。后面用逗号分割的剩余4项分别表示:支付业务,查询业务,发货业务,库存查询业务。TPC-C标准要求库存查询业务必须在20s内完成,其余业务必须在5s内完成。
***/
STOPPING THREADS................

/*** 汇总各种业务各状态的数据量,sc: success, lt: late, rt: retry, fl: failure ***/
  [0] sc:11812  lt:22  rt:0  fl:0 
  [1] sc:11833  lt:0  rt:0  fl:0 
  [2] sc:1183  lt:0  rt:0  fl:0 
  [3] sc:1182  lt:0  rt:0  fl:0 
  [4] sc:1183  lt:0  rt:0  fl:0 
 in 60 sec.

  [0] sc:11812  lt:22  rt:0  fl:0 
  [1] sc:11833  lt:0  rt:0  fl:0 
  [2] sc:1183  lt:0  rt:0  fl:0 
  [3] sc:1182  lt:0  rt:0  fl:0 
  [4] sc:1183  lt:0  rt:0  fl:0 

/*** 以下内容是TPC-C标准的要求,一般而言必须都是OK才是满足TPC-C测试标准要求的 ***/
(all must be [OK])
 [transaction percentage]
        Payment: 43.48% (>=43.0%) [OK]  //支付业务占总业务43.48%
   Order-Status: 4.35% (>= 4.0%) [OK]   //查询业务占4.35%
       Delivery: 4.34% (>= 4.0%) [OK]       //发货业务占4.34%
    Stock-Level: 4.35% (>= 4.0%) [OK]    //库存查询业务占4.35%,故(100-43.48-4.35-4.34-4.35)%是新订单业务的百分比
 [response time (at least 90% passed)]
      New-Order: 99.81%  [OK]
        Payment: 100.00%  [OK]
   Order-Status: 100.00%  [OK]
       Delivery: 100.00%  [OK]
    Stock-Level: 100.00%  [OK]

                 11834.000 TpmC   //每分钟可完成新订单业务11834笔

3.2 -f report输出的文件
report输出文件就是很多组数据对,如下例:
0 1.273  //0表示timestamp,1.273表示在0-10s内的第1笔新订单业务耗时1.273s
0 1.752   //0表示timestamp,1.752表示在0-10s内的第2笔新订单业务耗时1.752s
0 3.768
0 3.399
0 1.584
...(篇幅限制,此处省略很多数据对,下同)
10 1.489      //10表示timestamp,1.489表示在10-20s内的第1笔新订单业务耗时1.489s
10 1.635
...
20 2.538
20 1.751
...
30 2.849
30 1.548
...
40 4.742
40 3.080
...
50 2.455
50 2.582
...
60 1.626
你可以使用[grep -P -w '^10' report | wc]命令得到timestamp是20时的新订单业务总量,得到结果刚好是控制台输出的1909(由于计数统计可能不能完全分割时间,得到的值可能与控制台输出稍有出入,且第一个和最后一个timestamp统计是不准确的,这是正常的)。所以我们仅使用report文件就可以进行绘图分析了。

3.3 -t trx输出文件
t_num: 10 finish: 1364890011 61758711 start: 1364890011 27467602
t_num: 0 finish: 1364890011 63430248 start: 1364890011 24673279
t_num: 7 finish: 1364890011 73803144 start: 1364890011 28447105
...
上面第一行,10表示这个结果是第10个connect输出的(记得上述./tpcc_start -c num参数吗,这个值就在0~num-1范围内,你可以认为这是线程ID);” start: 1364890011 27467602“表示这笔新订单发送的起始时间,两组数字前者是单位是s,或者单位是ns;” finish: 1364890011 61758711“表示这笔新订单发送的结束时间。finish-start可得出发送这笔新订单所使用的时间,注意这个时间指的是占用CPU时间,其实订单完成时间很大一部分消耗在磁盘的IO处理上。

4. 后记
本文tpcc-mysql测试结果是在笔者所在公司研发的SSD上测试得到的(1000W,16个connect),如果你的mysql数据库是建立在普通硬盘上的,性能可能只是本文的1%。另外,由于mysql版本和配置及测试机器cpu性能的不同,本SSD实测结果可能会更好。

你可能感兴趣的:(Linux平台应用技术)