TPCC - MySQL 数据库测试
date
Dec 15, 2021
slug
TPCC
status
Published
tags
Test
Database
summary
TPCC - MySQL 数据库测试
type
Post
Language
TPCC 介绍
TPC-C 模拟了一个比较有代表意义的 OLTP 应用环境:在线订单处理系统。假设有一个大型商品批发商,拥有 N 个位于不同区域的仓库,每个仓库负责为 10 个销售点供货,每个销售点有 3000 个客户,每个客户平均一个订单有 10 项产品。由于一个仓库中不可能 存储公司所有的货物,有一些请求必须发往其它仓库,因此,数据库在逻辑上是 分布的。N 是一个可变参数,测试者可以随意改变 N,以获得最佳测试效果。
TPCC 有 5 种事务,测试完成后会输出这 5 种事务的吞吐量和延迟。
- New-Order: 客户输入一笔新的订货交易
- Payment:更新客户账户余额以反应其支付状况
- Delivery:发货(批处理交易)
- Order-Status:查询客户最近交易的状态
- Stock-Level:查询仓库库存状况,以便能够及时补货。
安装 TPCC - MySQL
git clone <https://github.com/Percona-Lab/tpcc-mysql>
cd tpcc-mysql/src
make如果报错
mysql_config: not found 安装以下依赖# Cent OS
sudo yum install mysql-devel
# Debain or Ubuntu
sudo apt install libmysqlclient-dev编译安装成功后,会在
tpcc-mysql 目录下生成 tpcc_load 和 tpcc_start 可执行文件初始化数据库
创建 TPCC 数据库
mysql -uroot -p -e "CREATE DATABASE TPCC DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"初始化表结构
mysql -uroot -p TPCC <./create_table.sql创建相关索引和主外键
mysql -uroot -p TPCC <./add_fkey_idx.sql装载数据
- h 数据库地址
- P 数据库端口
- d 数据库名称
- u 数据库用户
- p 数据库密码
- w 仓库数
./tpcc_load -h 127.0.0.1 -P 3306 -d TPCC -u root -p 000000 -w 10测试
- c 线程数
- r 预热时间(秒)
- l 测试持续时间
./tpcc_start -h 127.0.0.1 -P 3306 -d TPCC -u root -p 000000 -w 10 -c 128 -r 120 -l 200测试结果分析
过程
10, trx: 525, 95%: 693.088, 99%: 4338.168, max_rt: 10359.842, 510|15856.770, 51|1440.460, 48|10947.689, 51|10114.716
20, trx: 688, 95%: 2158.457, 99%: 4750.035, max_rt: 5101.409, 690|13675.766, 69|1255.582, 70|6061.973, 69|5322.404
30, trx: 848, 95%: 630.345, 99%: 890.963, max_rt: 1146.531, 856|10319.565, 86|101.299, 84|3822.822, 84|1366.602
40, trx: 357, 95%: 9212.758, 99%: 10117.659, max_rt: 10323.202, 354|14805.343, 34|332.008, 41|11413.883, 35|10782.403
50, trx: 683, 95%: 1154.279, 99%: 4650.147, max_rt: 4784.734, 689|14141.830, 70|529.657, 63|5845.514, 71|4475.639
60, trx: 973, 95%: 626.207, 99%: 2044.010, max_rt: 5434.062, 949|8996.483, 96|278.258, 100|6328.977, 93|5320.758
70, trx: 316, 95%: 5367.070, 99%: 5593.421, max_rt: 5744.056, 337|14920.423, 33|3960.090, 29|11122.768, 34|6203.226
80, trx: 919, 95%: 663.053, 99%: 1059.254, max_rt: 2032.116, 897|14885.748, 91|1357.449, 93|2456.914, 91|2865.899
90, trx: 995, 95%: 732.772, 99%: 3841.721, max_rt: 5016.498, 1001|9583.489, 100|289.054, 103|5651.122, 100|5430.500
100, trx: 151, 95%: 6388.488, 99%: 8505.098, max_rt: 9614.788, 148|13961.462, 14|693.510, 13|10215.984, 15|9836.256
110, trx: 916, 95%: 648.333, 99%: 839.439, max_rt: 1853.894, 924|14653.528, 92|311.375, 86|5385.129, 92|2132.058
120, trx: 813, 95%: 1812.811, 99%: 4692.094, max_rt: 5101.852, 804|10732.737, 82|401.510, 85|6312.344, 80|5579.595这类信息,每 10 秒产生一条输出,返回结果以逗号分隔后,共可以分为 6 列,
- 每 10 秒为一个区间进行输出。
- 该时间区间内成功执行的事务
- 95% 事务的响应时间
- 99% 事务的响应时间
- 事务的最大响应时间
- 订单支付、查询订单、发货、查询库存
结果
<Raw Results>
[0] sc:0 lt:8184 rt:0 fl:0 avg_rt: 986.1 (5)
[1] sc:0 lt:8159 rt:0 fl:0 avg_rt: 5308.2 (5)
[2] sc:119 lt:699 rt:0 fl:0 avg_rt: 88.4 (5)
[3] sc:0 lt:815 rt:0 fl:0 avg_rt: 4473.7 (80)
[4] sc:0 lt:815 rt:0 fl:0 avg_rt: 2794.0 (20)
in 120 sec.
<Raw Results2(sum ver.)>
[0] sc:0 lt:8184 rt:0 fl:0
[1] sc:0 lt:8184 rt:0 fl:0
[2] sc:119 lt:699 rt:0 fl:0
[3] sc:0 lt:815 rt:0 fl:0
[4] sc:0 lt:815 rt:0 fl:0会有两次测试结果
Raw Result 和 Raw Result2从第一行到最后一行,依次对应
新订单、支付、订单查询、发货、库存- sc: 成功操作
- lt: 延时操作
- rt: 重试操作
- fl: 失败操作
- avg_rt: 平均重试操作
统计
<Constraint Check> (all must be [OK])
[transaction percentage]
Payment: 43.42% (>=43.0%) [OK]
Order-Status: 4.35% (>= 4.0%) [OK]
Delivery: 4.34% (>= 4.0%) [OK]
Stock-Level: 4.34% (>= 4.0%) [OK]
[response time (at least 90% passed)]
New-Order: 0.00% [NG] *
Payment: 0.00% [NG] *
Order-Status: 14.55% [NG] *
Delivery: 0.00% [NG] *
Stock-Level: 0.00% [NG] *- 事务百分比,大于基准值会显示
OK
- 响应时间,大于
90%会显示OK
Tpm
<TpmC>
4092.000 TpmCTpm 是
Transactions per minute 的缩写,C 指的是执行 TPC-C 基准测试。
TpmC 这项指标为整体性能指标,表示每分钟事务数,代表了本系统每分钟能够处理的订单数量。TPCC - MySQL 公式:
f = (float)(success[0] + late[0]) * 60.0 / (float)((measure_time / PRINT_INTERVAL) * PRINT_INTERVAL);