TPCC介绍
TPCC是一种基于OLTP的性能测试标准,其主要目的是测试数据库在高并发条件下的事务处理能力。该测试需要在规定时间内完成一定数量的事务,并计算出每分钟处理事务数作为衡量数据库性能的标准。
TPCC模拟了批发供应商的业务场景,涉及多个事务类型,并实现了对多用户并发访问的支持。
安装TPCC
克隆代码库
bash
git clone https://github.com/Percona-Lab/tpcc-mysql.git
cd tpcc-mysql/src
修改Makefile
javascript
#
# "make all" to build necessary executables.
#
# 添加-pthread和-lm
LIBS= `mysql_config --libs_r` -pthread -lrt -lm
INC= -I. `mysql_config --include`
#DEFS= -DDEBUG
CFLAGS= -w -O3 -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 sb_percentile.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) -o ../tpcc_load
../tpcc_start : $(OBJS)
$(CC) $(OBJS) $(LIBS) -o ../tpcc_start
clean :
rm -f *.o
编译
bash
cd tpcc-mysql/src
make
编译成功:

编译成功后,在tpcc-mysql目录下会生成两个可执行文件:tpcc_load 、tpcc_start(用于灌数据和测试)

TPCC使用
建库建表
sql
# 建库(tpcc10)
mysql -h127.0.0.1 -uroot -pkingsoft. -P6033 -e "create database tpcc10;"
# 建表
mysql -h127.0.0.1 -uroot -pkingsoft. -P6033 -f tpcc10 < ./tpcc-mysql/create_table.sql
灌数据
bash
# -w指定仓库数
./tpcc_load -h127.0.0.1 -dtpcc10 -uroot -p"123456" -w10 -P6033
注:灌数据时仓库越多,测试数据越大,整个过程越慢,可根据需求自行调整。
灌数据结果:

开始测试
bash
# -w 100(仓库数)、-c 128(线程数)、-r 300(预热10s)、-l 3600(持续压测30s)
# 预热和执行时间过短时,直接结果可能有问题
./tpcc_start -h127.0.0.1 -uroot -pkingsoft. -P6033 -dtpcc10 -w10 -c128 -r300 -l600
测试结果

TPCC结果解读
<Raw Results>
bash
<Raw Results>
[0] sc:1 lt:286606 rt:0 fl:0 avg_rt: 46.4 (5)
[1] sc:0 lt:286528 rt:0 fl:0 avg_rt: 313.7 (5)
[2] sc:0 lt:28661 rt:0 fl:0 avg_rt: 87.5 (5)
[3] sc:0 lt:28658 rt:0 fl:0 avg_rt: 250.0 (80)
[4] sc:38 lt:28622 rt:0 fl:0 avg_rt: 79.6 (20)
in 600 sec.
<Raw Results2(sum ver.)>
[0] sc:1 lt:286606 rt:0 fl:0
[1] sc:0 lt:286605 rt:0 fl:0
[2] sc:0 lt:28661 rt:0 fl:0
[3] sc:0 lt:28660 rt:0 fl:0
[4] sc:38 lt:28622 rt:0 fl:0
表示测试期间,5种事务执行情况:
- sc:表示执行成功且请求延时在最大阀值之内的事务数
- lt:表示执行成功,但请求延时在最大阀值之外的事务数
- rt:表示通过重试后执行成功的事务数
- fl:表示执行失败的事务数
- avg_rt:表示事务的平均处理延迟
注:上述(5)、(5)、(5)、(80)、(20)分别表示其请求延迟的最大阈值。
<Constraint Check>
bash
<Constraint Check> (all must be [OK])
[transaction percentage]
Payment: 43.47% (>=43.0%) [OK]
Order-Status: 4.35% (>= 4.0%) [OK]
Delivery: 4.35% (>= 4.0%) [OK]
Stock-Level: 4.35% (>= 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.13% [NG] *
<TpmC>
28660.699 TpmC
- **[transaction percentage]含义:**TPCC对每一种事务的比例有要求,因此 transaction percentage 这个检查项,是用来检查tpcc测试结束后,每一种事务所在的比例是否合乎要求。
- [response time (at least 90% passed)]含义: TPCC规定了每一种事务的最大请求延迟。在 Raw Results 最后的括号中,为5、5、5、80、20。TPCC要求,每一种事务必须有90%的事务的请求延迟,在这个规定范围内。如果达到要求这报告ok,否则则报告错误。(即对性能要求比较严苛)