转自 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测试一个重要的参数就是仓库数目。
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 <
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 ***/
<Raw Results>
[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.
<Raw Results2(sum ver.)>
[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测试标准要求的 ***/
<Constraint Check> (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]
<TpmC>
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实测结果可能会更好。