• 运维特工,战胜心魔!!
  • 有些事情其实没有那么难,只是我们感觉难,走出第一步!
  • 你所浪费的今天,是昨天死去的人奢望的明天!!!
  • 欢迎访问 unixfbi.com 运维特工社区http://unixfbi.com/
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 运维特工:http://www.unixfbi.com
  • 人生没有白走的路,每一步都算数!!
  • 空杯心态,沉淀自己!

tpcc-mysql实践

MySQL unixfbi 1年前 (2018-03-20) 3282次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

tpcc-mysql 实践

一、TPCC 介绍

  • TPC:
    全称[T]ransaction [Processing] Performance [C]ouncil (事务处理性能委员会),是一家非盈利性组织,该组织制定各种商业应用的基准测试规范,任意厂商和个人,都可以按照其规范来开发自己的应用程序。

  • TPC-C:
    是由 TPC 推出的一套基准测试程序,主要用于联机事务类应用的测试,最后的字母 C 是序号,因为在他之前有 TPC-A 和 TPC-B。使用的比较多的是 TPC-C,因为 TPCC 是套基准。
    TPC-C 是专门针对联机交易处理系统(OLTP 系统)的规范,一般情况下我们也把这类系统称为业务处理系统
    TPC-C 使用三种性能和价格度量,其中性能由 tpmC(transactions per minute,tpm)衡量,Cpm)衡量,C 指 TPC 中的 C 基准程序。它的定义是每分钟内系统处理的新订单个数。TPC-C 还经常以系统性能价格比的方式体现,单位是$/tpmC,即以系统的总价格(单位是美元)/tpmC 数值得出

  • TPCC-MYSQL:
    由 Percona 基于 TPCC 规范开发的一套 mysql 基准测试程序。

  • 测试指标:
    TPC-C 测试的结果主要有两个指标,即流量指标(Throughput,简称 tpmC)。
    流量指标(Throughput,简称 tpmC):按照 TPC 组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这 4 种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满足 TPC-C 测试规范的要求,且各种交易数量所占的比例也应该满足 TPC-C 测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。

二、tpcc-mysql 安装

1.安装 bzr

# yum install bzr -y 

2.下载 tpcc-mysql

# cd /usr/local/
# bzr branch lp:~percona-dev/perconatools/tpcc-mysql

下载完成后,当前目录下会有 tpcc-mysql 目录

3.编译安装 tpcc-mysql

# cd /usr/local/tpcc-mysql/src/
# make 

如果没有报错,tpcc-mysql 就安装完成了。
安装完成后会生成两个可执行文件:
tpcc_load:用于初始化数据。
tpcc_start:用于执行基准测试。

三、tpcc-mysql 使用

一般分为下面 4 个步骤:
创建数据和表结构
加载数据
执行测试
测试结果解读分析

1.创建表和索引

创建库:

# mysql -uroot -punixfbi -h192.168.199.134 -e "create database tpcc;"

创建表结构:

# mysql -uroot -punixfbi -h192.168.199.134 tpcc < /usr/local/tpcc-mysql/create_table.sql 

创建索引:

# mysql -uroot -punixfbi -h192.168.199.134 tpcc < /usr/local/tpcc-mysql/add_fkey_idx.sql 

表的介绍:

# mysql -uroot -punixfbi -h192.168.199.134 -e "show tables from tpcc;"

+----------------+
| Tables_in_tpcc |
+----------------+
| customer       |    #用户表
| district       |    #分布表
| history        |    #历史记录表
| item           |    #订单详情表
| new_orders     |    #新订单表
| order_line     |
| orders         |    #商品表
| stock          |
| warehouse      |    #仓库相关表
+----------------+

2.初始化数据

先看看 tpcc_load 的用法吧

# ./tpcc_load -h
*************************************
*** ###easy### TPC-C Data Loader  ***
*************************************

 usage: tpcc_load [server] [DB] [user] [pass] [warehouse]
      OR
        tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]

           * [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS

参数含义:
server:数据库 IP
DB:数据库名称
user:用户名
pass:密码
warehouse:仓库数量
执行下面的命令开始初始化数据:(仓库数我选择了 10 个)

# ./tpcc_load 192.168.199.134 tpcc root unixfbi 10

初始化成功最后会输出:

...DATA LOADING COMPLETED SUCCESSFULLY.

3.开始测试:

# ./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 warehouses :仓库数量
-c connections:并发线程数
-r warmup_time:指定预热时间,以秒为单位,默认是 10 秒,主要目的是为了将数据加载到内存。
-l running_time:指定测试执行的时间,以秒为单位,默认是 20 秒。
-i report_interval:指定生成报告的间隔时间。
-f report_file:将测试中各项操作的记录输出到指定文件内保存。
-t trx_file:输出更详细的操作信息到指定文件内保存。

执行下面的命令:

真实测试场景中,建议预热时间不小于 5 分钟,持续压测时长不小于 30 分钟,否则测试数据可能不具参考意义。

# /usr/local/tpcc-mysql/tpcc_start -h 192.168.199.134 -d tpcc -u root -p unixfbi -w 10 -c 10 -r 120 -l 300 -f /tmp/tpcc_mysql.log -t /tmp/tpcc_mysql.rtx  

输出结果如下:

***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.199.134'
option d with value 'tpcc'
option u with value 'root'
option p with value 'unixfbi'
option w with value '10'
option c with value '10'
option r with value '120'
option l with value '300'
option f with value '/tmp/tpcc_mysql.log'
option t with value '/tmp/tpcc_mysql.rtx'
<Parameters>
     [server]: 192.168.199.134
     [port]: 3306
     [DBname]: tpcc
       [user]: root
       [pass]: unixfbi
  [warehouse]: 10
 [connection]: 10
     [rampup]: 120 (sec.)
    [measure]: 300 (sec.)

RAMP-UP TIME.(120 sec.)    # 预热结束

MEASURING START.    #开始压测

  10, 17(0):2.373|2.422, 19(0):0.451|0.456, 2(0):0.197|0.219, 2(0):2.501|2.524, 1(0):7.323|7.645
  20, 15(0):2.367|2.377, 15(0):0.437|0.451, 1(0):0.000|0.154, 0(0):0.000|0.000, 1(0):0.000|7.162
  30, 16(0):2.059|2.387, 13(0):0.414|0.424, 2(0):0.181|0.185, 3(0):2.440|2.491, 2(0):6.803|6.939
  40, 25(0):2.356|2.415, 23(0):0.403|0.434, 2(0):0.178|0.191, 2(0):2.389|2.415, 1(0):0.000|6.352
  50, 12(0):2.337|2.369, 15(0):0.431|0.445, 1(0):0.000|0.153, 1(0):0.000|2.483, 2(0):6.574|7.576
  60, 17(0):2.339|2.365, 16(0):0.440|0.459, 2(0):0.186|0.196, 2(0):2.395|2.487, 2(0):7.335|7.409
  70, 16(0):2.021|2.029, 21(0):0.424|0.461, 1(0):0.000|0.189, 2(0):2.476|2.483, 1(0):0.000|6.819
  80, 21(0):2.198|2.371, 17(0):0.414|0.416, 3(0):0.188|0.192, 3(0):2.402|2.439, 2(0):6.571|7.422
  90, 23(0):2.321|2.323, 21(0):0.432|0.440, 2(0):0.138|0.184, 1(0):0.000|2.455, 2(0):6.884|7.180
 100, 15(0):2.361|2.363, 17(0):0.428|0.451, 1(0):0.000|0.152, 0(0):0.000|0.000, 2(0):7.156|7.540
 110, 23(0):2.064|2.235, 25(0):0.430|0.437, 3(0):0.176|0.197, 4(0):2.503|2.548, 2(0):7.967|8.113
 120, 22(0):2.300|2.383, 21(0):0.423|0.448, 2(0):0.177|0.190, 1(0):0.000|2.468, 3(0):6.173|6.886
 130, 16(0):2.205|2.218, 15(0):0.434|0.448, 1(0):0.000|0.146, 3(0):2.469|2.484, 1(0):0.000|7.093
 140, 20(0):1.888|2.172, 18(0):0.377|0.422, 3(0):0.197|0.201, 3(0):2.461|2.462, 2(0):6.616|6.862
 150, 25(0):2.298|2.346, 29(0):0.426|0.435, 3(0):0.151|0.189, 0(0):0.000|0.000, 3(0):6.620|7.634
 160, 16(0):2.356|2.370, 13(0):0.433|0.438, 1(0):0.000|0.182, 2(0):2.454|2.475, 1(0):0.000|6.241
 170, 23(0):2.172|2.220, 23(0):0.429|0.430, 2(0):0.148|0.187, 3(0):2.424|2.461, 2(0):6.356|6.796
 180, 14(0):2.305|2.340, 14(0):0.438|0.439, 2(0):0.152|0.184, 1(0):0.000|2.357, 1(0):0.000|6.746
 190, 14(0):2.277|2.328, 17(0):0.437|0.439, 0(0):0.000|0.000, 2(0):2.443|2.547, 2(0):6.742|7.037
 200, 17(0):2.351|2.389, 14(0):0.446|0.452, 2(0):0.181|0.194, 1(0):0.000|2.474, 2(0):6.341|7.903
 210, 15(0):2.170|2.204, 18(0):0.407|0.432, 2(0):0.180|0.183, 1(0):0.000|2.476, 2(0):5.901|5.908
 220, 17(0):2.173|2.177, 17(0):0.425|0.428, 2(0):0.151|0.194, 2(0):2.449|2.519, 1(0):0.000|6.618
 230, 21(0):2.230|2.315, 18(0):0.429|0.434, 2(0):0.147|0.184, 3(0):2.455|2.498, 2(0):6.642|6.693
 240, 17(0):2.258|2.302, 18(0):0.437|0.457, 2(0):0.193|0.195, 2(0):2.420|2.447, 2(0):6.692|7.080
 250, 20(0):2.305|2.313, 23(0):0.435|0.442, 2(0):0.145|0.190, 2(0):2.397|2.414, 1(0):0.000|6.861
 260, 21(0):2.338|2.362, 20(0):0.423|0.428, 1(0):0.000|0.198, 1(0):0.000|2.459, 3(0):7.298|7.670
 270, 17(0):2.326|2.358, 15(0):0.421|0.423, 2(0):0.154|0.157, 2(0):2.389|2.440, 2(0):6.114|6.304
 280, 26(0):2.271|2.274, 27(0):0.422|0.431, 3(0):0.183|0.188, 3(0):2.414|2.478, 2(0):6.161|6.973
 290, 15(0):2.025|2.134, 17(0):0.408|0.414, 1(0):0.000|0.166, 2(0):2.421|2.428, 2(0):6.643|7.348
 300, 18(0):2.313|2.347, 17(0):0.427|0.428, 2(0):0.150|0.203, 0(0):0.000|0.000, 2(0):6.775|6.900

STOPPING THREADS..........     # 压测结束

<Raw Results>
  [0] sc:554  lt:0  rt:0  fl:0 
  [1] sc:558  lt:0  rt:0  fl:0 
  [2] sc:55  lt:0  rt:0  fl:0 
  [3] sc:54  lt:0  rt:0  fl:0 
  [4] sc:54  lt:0  rt:0  fl:0 
 in 300 sec.

<Raw Results2(sum ver.)>
  [0] sc:554  lt:0  rt:0  fl:0 
  [1] sc:558  lt:0  rt:0  fl:0 
  [2] sc:55  lt:0  rt:0  fl:0 
  [3] sc:54  lt:0  rt:0  fl:0 
  [4] sc:54  lt:0  rt:0  fl:0 

<Constraint Check> (all must be [OK])
 [transaction percentage]
        Payment: 43.76% (>=43.0%) [OK]
   Order-Status: 4.31% (>= 4.0%) [OK]
       Delivery: 4.24% (>= 4.0%) [OK]
    Stock-Level: 4.24% (>= 4.0%) [OK]
 [response time (at least 90% passed)]
      New-Order: 100.00%  [OK]
        Payment: 100.00%  [OK]
   Order-Status: 100.00%  [OK]
       Delivery: 100.00%  [OK]
    Stock-Level: 100.00%  [OK]

<TpmC>
                 110.800 TpmC

4.测试结果解读:

第一部分:

  10, 17(0):2.373|2.422, 19(0):0.451|0.456, 2(0):0.197|0.219, 2(0):2.501|2.524, 1(0):7.323|7.645
  20, 15(0):2.367|2.377, 15(0):0.437|0.451, 1(0):0.000|0.154, 0(0):0.000|0.000, 1(0):0.000|7.162
  30, 16(0):2.059|2.387, 13(0):0.414|0.424, 2(0):0.181|0.185, 3(0):2.440|2.491, 2(0):6.803|6.939
  40, 25(0):2.356|2.415, 23(0):0.403|0.434, 2(0):0.178|0.191, 2(0):2.389|2.415, 1(0):0.000|6.352

这类信息,每 10 秒产生一条输出,返回结果以逗号分隔后,共可以分为 6 列,
第一项:每 10 秒为一个区间进行输出。后面 5 项分属不同的业务操作,输出信息格式都一样。每一项都有 4 个属性值,即该时间区间内成功执行的事务、出现延迟的事务、90%事务的响应时间、事务的最大响应时间。
我们拿一条来解释:

  10, 17(0):2.373|2.422, 19(0):0.451|0.456, 2(0):0.197|0.219, 2(0):2.501|2.524, 1(0):7.323|7.645

解释:
在第一个 10 秒区间内:
创建订单:共操作 17 次,失败 0 次,90%的事务平均操作时间 2.373 秒,最大操作时间是 2.422 秒。
订单支付:同上
查询订单:同上
发货:同上
查询库存:同上

第二部分:

<Raw Results>
  [0] sc:554  lt:0  rt:0  fl:0    -- New-Order,新订单业务成功(success,简写 sc)数量,操作出现延迟(late,简写 lt)数量,操作重试(retry,简写 rt)数量,失败(failure,简写 fl)数量
  [1] sc:558  lt:0  rt:0  fl:0     -- Payment,支付业务统计,其他同上
  [2] sc:55  lt:0  rt:0  fl:0  -- Order-Status,订单状态业务统计,其他同上
  [3] sc:54  lt:0  rt:0  fl:0   -- Delivery,发货业务统计,其他同上
  [4] sc:54  lt:0  rt:0  fl:0   -- Stock-Level,库存业务统计,其他同上
 in 300 sec.

第三部分:
TPCC 测试要求下面状态必须为 OK

<Constraint Check> (all must be [OK])
 [transaction percentage]
        Payment: 43.76% (>=43.0%) [OK]    # 要求支付业务占比
   Order-Status: 4.31% (>= 4.0%) [OK]    # 订单状态查询业务占比
       Delivery: 4.24% (>= 4.0%) [OK]    # 物流相关业务占比
    Stock-Level: 4.24% (>= 4.0%) [OK]    # 库存相关业务占比
 [response time (at least 90% passed)]
      New-Order: 100.00%  [OK]
        Payment: 100.00%  [OK]
   Order-Status: 100.00%  [OK]
       Delivery: 100.00%  [OK]
    Stock-Level: 100.00%  [OK]

第四部分:

<TpmC>
                 110.800 TpmC

Tpm 是 Transactions per minute的缩写,C 指的是执行 TPC-C 基准测试。
TpmC 这项指标为整体性能指标,表示每分钟事务数,代表了本系统每分钟能够处理的订单数量。
该值是第一次统计结果中的新订单事务数除以总耗时分钟数,例如本例中是 554/5 =110.8

参考文档

《涂抹 MySQL》一书
http://imysql.com/2014/10/10/tpcc-mysql-full-user-manual.shtml
https://baike.baidu.com/item/TPCC/10023747?fr=aladdin
https://www.cnblogs.com/xuanzhi201111/p/4148434.html
https://www.cnblogs.com/Aiapple/p/5705146.html

本文出自 “运维特工” 博客,转载请务必保留原文链接 和 http://www.unixfbi.com


UnixFBI 运维特工 , 版权所有丨如未注明 , 均为原创丨 转载请务必注明原文链接http://www.unixfbi.com/380.html
喜欢 (7)
[支付宝]
分享 (0)
unixfbi
关于作者:
运维工程师一枚,做有价值的事情!
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址