娱乐版TPC测试
测试 TPC 本来是个严肃的事情,这里只是为了娱乐一下。不要和TPC委员会的高端报告混为一谈就好了。
- 先去找个不那么标准的TPC-C测试工具
Percona MySQL 的这个东西用得人还比较多:http://bazaar.launchpad.net/~percona-dev/perconatools/tpcc-mysql/简单的看了一下实现,这个和标准的差距还是较大的,例如事务之间没有停顿,也就是没有所谓的 thinking time,测出来的 tpmC 的值会虚高。因为这个,代码中也把事务的超时时间调小了很多。换个角度来看,我们可以说这个比较符合典型的互联网应用编写方法,短事务居多。
不管是 TPC,还是 SPECfs,测试的基本步骤是通用的。大概都会有:a) 准备环境b) 加载数据c) 开跑d) 产生报告
当然了,跑一次不容易,为了分析遇到的问题,开跑的过程中应该记录一些数据,例如 CPU、内存、网络、IO 等统计数据。
- 熟悉一下工具
源代码目录下的 README 什么的是一定要看的,并且要仔细看。闲的蛋疼的话,还可以看看那些代码。
既然是测试 TPC-C,必定有些建表的语句,这个需要仔细看看。例如:create_table.sql, add_fkey_idx.sql
表上至少应该有标准规定的那些个主码,外码等约束。不带约束的测试就是耍流氓。
- 在正式开测之前,需要模拟练手一下,把该犯的错误都犯一遍。
编译测试程序:
$ cd src; make;
创建数据库,假设库名叫做 tpcc 好了:
$ mysqladmin --no-defaults -S /home/mysql/run/mysql.sock -u root create tpcc
建表:
$ mysql --no-defaults -S /home/mysql/run/mysql.sock -u root tpcc < create_table.sql
加载数据,假设加载10个仓库好了:
$ ./tpcc_load 127.0.0.1:3306 tpcc root "" 10
机器要是差点,一个小时都搞不定。抽根烟肯定是不够的,出去吃个饭吧。既然这么慢,一定有比这快点的办法。例如:
采用并行加载模式:
$ ./load.sh tpcc 10
追加外码约束:
$ mysql --no-defaults -S /home/mysql/run/mysql.sock -u root tpcc < add_fkey_idx.sql
前面说过,不加约束的测试是……在数据加载完毕后再执行有助于减少数据加载时间。再去抽颗烟吧。
跑测试:
$ ./tpcc_start -h 127.0.0.1 -P 3306 -d tpcc -u root -w 10 -c 5 -r 5 -l 300
5 个连接,预热 5 秒,跑 300 秒,也就是 5 分钟。一看就是娱乐版,这个跑不出什么好指标,例如:
a) 数据量太少b) 连接数太少c) 才跑了几百秒……
清理环境(删除数据库):
$ mysqladmin --no-defaults -S /home/mysql/run/mysql.sock -u root drop tpcc
跑完后会打印出个报告,最后一行类似于:
<TpmC>
10.200 TpmC
好可怜啊!
TPC-C
]