TPC-C 是用于模拟测试复杂的在线事务处理系统。其测试结果包括每分钟事务数(tpmC),以及每事务的成本(Price/tpmC )。在进行大压力下 MySQL 的一些行为时经常使用。
1、工具安装
下载完tpcc-mysql-src.tgz后,使用tar -zxvf tpcc-mysql-src.tgz进行源码包解压;
解压完后,可以看到以下目录文件
-rw-r--r--. 1 root root 1621 Sep 14 2014 add_fkey_idx.sql
-rw-r--r--. 1 root root 317 Sep 14 2014 count.sql
-rw-r--r--. 1 root root 3105 Sep 14 2014 create_table.sql
-rw-r--r--. 1 root root 763 Sep 14 2014 drop_cons.sql
-rw-r--r--. 1 root root 477 Sep 14 2014 load.sh
-rw-r--r--. 1 root root 851 Sep 14 2014 README
drwxr-xr-x. 2 root root 4096 Sep 14 2014 schema2
drwxr-xr-x. 5 root root 4096 Sep 14 2014 scripts
drwxr-xr-x. 2 root root 4096 Nov 24 09:54 src
进去src目录,这里要修改以下Makefile文件,目的是为了找到mysql安装路径正常编译,如下,以下红色的就是我新增的。
#
# "make all" to build necessary executables.
#
LIBS=`mysql_config --libs_r` -lrt
INC=-I. `mysql_config --include`-I/usr/local/mysql/include/
#DEFS=-DDEBUG
CFLAGS=-w -O2 -g
TRANSACTIONS=neword.o payment.o ordstat.o delivery.o slev.o
OBJS=main.o spt_proc.o driver.o support.o sequence.o rthist.o $(TRANSACTIONS)
.SUFFIXES:
.SUFFIXES: .o .c
.c.o:
$(CC) $(CFLAGS) $(INC) $(DEFS) -c $*.c
all: ../tpcc_load ../tpcc_start
../tpcc_load : load.o support.o
$(CC) load.o support.o $(LIBS)-L/usr/local/mysql/lib/-o ../tpcc_load
../tpcc_start : $(OBJS)
$(CC) $(OBJS) $(LIBS)-L/usr/local/mysql/lib/ -o ../tpcc_start
clean :
rm -f *.o
修改完配置文件后,可能会报/bash/bin command mysqld_config not found
修改下环境变量文件,加上export PATH=/usr/local/mysql/bin:$PATH即可。
修改完环境变量后,开始编译
执行make,输出以下信息则说明安装成功。
[root@mysqldb01 src]# make
cc load.o support.o `mysql_config --libs_r` -lrt -L/usr/local/mysql/lib/ -o ../tpcc_load
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c main.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c spt_proc.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c driver.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c sequence.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c rthist.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c neword.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c payment.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c ordstat.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c delivery.c
cc -w -O2 -g -I. `mysql_config --include` -I/usr/local/mysql/include/ -c slev.c
如果出现
error while loading shared libraries:libmysqlclient.so.18,
查看你的MySQL安装目录下/安装目录/lib/libmysqlclient.so.18是否存在,如果存在,那就做一个软链接到/usr/lib64/目录下
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64
安装完成后,tpcc-mysql目录下会多出两个执行文件
tpcc_load tpcc_start
2 初始化数据库
cd /root/tpcc-mysql
创建初始化数据库
mysqladmin -S /tmp/mysql01.sock create tpcc1000
创建表
mysql -S /tmp/mysql01.sock tpcc1000 < create_table.sql
以下为创建的表相关解释
New-Order:新订单,一次完整的订单事务,几乎涉及到全部表
Payment:支付,主要对应 orders、history 表
Order-Status:订单状态,主要对应 orders、order_line 表
Delivery:发货,主要对应 order_line 表
Stock-Level:库存,主要对应 stock 表
相关表:
客户:主要对应 customer 表
地区:主要对应 district 表
商品:主要对应 item 表
仓库:主要对应 warehouse 表
创建索引
mysql -S /tmp/mysql01.sock tpcc100 < add_fkey_idx.sql
初始化完毕后,就可以开始加载测试数据了
tpcc_load用法
tpcc_load [server] [DB] [user] [pass] [warehouse]
或者
tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]
选项 warehouse 意为指定测试库下的仓库数量。
在这里,需要注意的是 tpcc 默认会读取 /var/lib/mysql/mysql.sock 这个socket位置,因此如果你的socket不在相应路径的话,就需要做个软连接,或者通过TCP/IP的方式连接测试服务器。
ln -s /tmp/mysql01.sock /tmp/mysql.sock
./tpcc_load localhost tpcc100 root "password" 10 这一步时间比较久
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************
[server]: 192.168.11.123
[port]: 3306
[DBname]: tpcc110
[user]: root
[pass]: wanwen1027
[warehouse]: 10
TPCC Data Load Started...
Loading Item
.................................................. 5000
.................................................. 10000
.................................................. 15000
.................................................. 20000
.................................................. 25000
.................................................. 30000
.................................................. 35000
.................................................. 40000
.................................................. 45000
.................................................. 50000
.................................................. 55000
.................................................. 60000
.................................................. 65000
.................................................. 70000
.................................................. 75000
.................................................. 80000
.................................................. 85000
.................................................. 90000
.................................................. 95000
.................................................. 100000
Item Done.
3 开始使用
可以查看下使用帮助
[root@mysqldb01 tpcc-mysql]# ./tpcc_start --help
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
./tpcc_start: invalid option -- '-'
Usage: tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file -t trx_file
-w 指定仓库数量
-c 指定并发连接数
-r 指定开始测试前进行warmup的时间,进行预热后,测试效果更好
-l 指定测试持续时间
-i 指定生成报告间隔时长
-f 指定生成的报告文件名
./tpcc_start -h 192.168.11.123 -d tpcc110 -u root -p wanwen1027 -w 10 -c 100 -r 120 -l 360 -f 20161124.log >>2016testcase.log 2>&1
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.11.123'
option d with value 'tpcc110'
option u with value 'root'
option p with value 'xxx'
option w with value '10'
option c with value '100'
option r with value '120'
option l with value '360'
option f with value '20161124.log'
[server]: 192.168.11.123
[port]: 3306
[DBname]: tpcc110
[user]: root
[pass]: wanwen1027
[warehouse]: 10
[connection]: 100
[rampup]: 120 (sec.)
[measure]: 360 (sec.)
RAMP-UP TIME.(120 sec.)
MEASURING START.
10, 122(0):2.892|15.039, 109(0):0.837|1.388, 11(0):0.503|0.629, 12(0):3.812|3.922, 12(0):9.665|9.947
20, 121(0):2.074|2.277, 118(0):0.735|0.799, 15(0):0.268|0.707, 13(0):2.670|2.686, 9(0):5.574|7.674
30, 115(0):2.334|2.552, 131(0):0.815|0.857, 11(0):0.324|0.385, 9(0):4.048|4.093, 16(0):7.889|9.332
40, 151(0):2.902|3.246, 135(0):0.733|0.811, 15(0):0.337|0.368, 15(0):2.333|2.395, 15(0):5.339|6.545
50, 147(0):2.491|2.567, 146(0):0.769|0.822, 14(0):0.324|0.325, 16(0):3.162|3.315, 14(0):4.764|5.029
360, 135(0):2.004|2.126, 129(0):0.730|0.870, 13(0):0.271|0.276, 17(0):2.586|2.647, 14(0):4.525|4.821
STOPPING THREADS....................................................................................................
[0] sc:4999 lt:0 rt:0 fl:0
[1] sc:4983 lt:0 rt:0 fl:0
[2] sc:501 lt:0 rt:0 fl:0
[3] sc:501 lt:0 rt:0 fl:0
[4] sc:501 lt:0 rt:0 fl:0
in 360 sec.
[0] sc:4999 lt:0 rt:0 fl:0
[1] sc:4983 lt:0 rt:0 fl:0
[2] sc:501 lt:0 rt:0 fl:0
[3] sc:501 lt:0 rt:0 fl:0
[4] sc:501 lt:0 rt:0 fl:0
[transaction percentage]
Payment: 43.39% (>=43.0%) [OK]
-- 以逗号分隔,共6列
-- 第一列,第N次10秒
-- 第二列,新订单成功执行压测的次数(推迟执行压测的次数):90%事务的响应时间|本轮测试最大响应时间,新订单事务数也被认为是总有效事务数的指标
-- 第三列,支付业务成功执行次数(推迟执行次数):90%事务的响应时间|本轮测试最大响应时间
-- 第四列,订单状态业务的结果,后面几个的意义同上
-- 第五列,物流发货业务的结果,后面几个的意义同上
-- 第六列,库存仓储业务的结果,后面几个的意义同上