原文:https://blog.csdn.net/frockee/article/details/87812329
1. 填坑经验
 
不要使用tidb的tpcc测试程序(非标准,tidb修改过),使用:
https://github.com/Percona-Lab/tpcc-mysql
 
2. tpcc介绍
TPC-C 模拟了一个比较有代表意义的 OLTP 应用环境:在线订单处理系统。假设有一个大型商品批发商,拥有 N 个位于不同区域的仓库,每个仓库负责为 10 个销售点供货,每个销售点有 3000 个客户,每个客户平均一个订单有 10 项产品。由于一个仓库中不可能 存储公司所有的货物,有一些请求必须发往其它仓库,因此,数据库在逻辑上是 分布的。N 是一个可变参数,测试者可以随意改变 N,以获得最佳测试效果。
 
tpcc有5种事务,测试完成后会输出这5种事务的吞吐量和延迟。这5种事务是:
New-Order: 客户输入一笔新的订货交易
Payment:更新客户账户余额以反应其支付状况
Delivery:发货(批处理交易)
Order-Status:查询客户最近交易的状态
Stock-Level:查询仓库库存状况,以便能够及时补货。
而业内关注的tpcc核心性能指标只有2个,就是New-Order事务的吞吐量(tpm)和延迟。 其原因是tpcc委员会制定tpcc时, 重点是考量数据库对新订单的处理能力,以揭示该数据库的商业成本。 数据库整体报价/tpm = 每个订单的数据库成本。 这个指标对衡量一款数据库的性价比,具有非常实际的指导作用;
tpcc模拟的是在线订单处理系统。为了更加仿真实际的业务系统,除了New-Order这种事务,tpcc还引入了其他4种事务,并规定:任何一款实现tpcc测试标准的测试程序,其他4种事务,在总体事务中的占比必须不少于:
```
Payment:43%
Delivery:4%
Order-Status:4%
Stock-Level:4%
```
3.结果说明
tpcc-mysql完整跑下来,输出结果是:
```
MEASURING START.
  10, trx: 7688, 95%: 37.412, 99%: 51.629, max_rt: 96.649, 7691|83.015, 769|13.419, 769|91.254, 768|161.849
  20, trx: 7788, 95%: 35.259, 99%: 47.493, max_rt: 75.225, 7789|74.724, 779|12.381, 779|75.441, 780|162.908
  30, trx: 7838, 95%: 35.492, 99%: 49.808, max_rt: 83.075, 7837|68.275, 784|10.262, 783|87.521, 781|177.636
STOPPING THREADS................................
<Raw Results>
  [0] sc:0 lt:23315  rt:0  fl:0 avg_rt: 27.2 (5)
  [1] sc:11414 lt:11903  rt:0  fl:0 avg_rt: 11.7 (5)
  [2] sc:2313 lt:19  rt:0  fl:0 avg_rt: 2.8 (5)
  [3] sc:2328 lt:3  rt:0  fl:0 avg_rt: 51.3 (80)
  [4] sc:0 lt:2329  rt:0  fl:0 avg_rt: 105.2 (20)
 in 30 sec.
<Raw Results2(sum ver.)>
  [0] sc:0  lt:23316  rt:0  fl:0
  [1] sc:11414  lt:11903  rt:0  fl:0
  [2] sc:2313  lt:19  rt:0  fl:0
  [3] sc:2328  lt:3  rt:0  fl:0
  [4] sc:0  lt:2329  rt:0  fl:0
<Constraint Check> (all must be [OK])
 [transaction percentage]
        Payment: 43.48% (>=43.0%) [OK]
   Order-Status: 4.35% (>= 4.0%) [OK]
       Delivery: 4.35% (>= 4.0%) [OK]
    Stock-Level: 4.34% (>= 4.0%) [OK]
 [response time (at least 90% passed)]
      New-Order: 0.00%  [NG] *
        Payment: 48.95%  [NG] *
   Order-Status: 99.19%  [OK]
       Delivery: 99.87%  [OK]
    Stock-Level: 0.00%  [NG] *
<TpmC>
                 46630.000 TpmC
```
下面分别解释:
 
3.1 10s内各事务执行情况
```
10, trx: 7688, 95%: 37.412, 99%: 51.629, max_rt: 96.649, 7691|83.015, 769|13.419, 769|91.254, 768|161.849
```
每10s钟输出1条结果。其中:
7688 表示10s内处理完成的New-Order事务的数量
95%: 37.412: 表示95% New-Order事务的请求延迟在37.12ms以内
99%: 51.629: 表示95% New-Order事务的请求延迟在51.629ms以内
max_rt: 96.649 表示New-Order事务的最大请求延迟为96.649
7691|83.015: 表示10s内,Payment事务的处理数量和95%事务的请求延迟
769|13.419: 表示10s内,Delivery事务的处理数量和95%事务的请求延迟
769|91.254: 表示10s内,Order-Status事务的处理数量和95%事务的请求延迟
768|161.849: 表示10s内,Stock-Level事务的处理数量和95%事务的请求延迟
 
3.2 压测结束后第一次统计结果
```
<Raw Results>
  [0] sc:0 lt:23315  rt:0  fl:0 avg_rt: 27.2 (5)
  [1] sc:11414 lt:11903  rt:0  fl:0 avg_rt: 11.7 (5)
  [2] sc:2313 lt:19  rt:0  fl:0 avg_rt: 2.8 (5)
  [3] sc:2328 lt:3  rt:0  fl:0 avg_rt: 51.3 (80)
  [4] sc:0 lt:2329  rt:0  fl:0 avg_rt: 105.2 (20)
 in 30 sec.
```
表示tpcc事务执行期间,5种事务执行情况。其中:
sc: 表示执行成功且请求延时在最大阀值之内(5ms)的事务数
lt: 表示执行成功,但请求延时在最大阀值之外(5ms)的事务数
rt: 表示通过重试后执行成功的事务数
fl: 表示执行失败的事务数
avg_rt: 表示事务的平均处理延迟
### 压测结束后第二次统计结果
```
<Raw Results2(sum ver.)>
  [0] sc:0  lt:23316  rt:0  fl:0
  [1] sc:11414  lt:11903  rt:0  fl:0
  [2] sc:2313  lt:19  rt:0  fl:0
  [3] sc:2328  lt:3  rt:0  fl:0
  [4] sc:0  lt:2329  rt:0  fl:0
```
为什么会有第二次统计结果? 根本原因是出于尽可能让tpcc高性能执行,又能做统计的考虑。
第一次统计结果中,在每次事务执行结束后,将sc、rt等变量++, 最后输出其统计结果; 在++时,并不会对sc、rt等进行并发安全保护;任何线程执行完成之后,直接++即可;
但这种做法毕竟存在一定的误差。为了修复这个问题,tpcc-mysql为每一个工作线程,内置了一套sc、rt 变量。 在执行结束后,把所有工作线程的这些变量值累加然后输出;可见,这种做法是不会存在误差的。
 
3.3 根据预置的结果阀值对结果进行分析
```
<Constraint Check> (all must be [OK])
 [transaction percentage]
        Payment: 43.48% (>=43.0%) [OK]
   Order-Status: 4.35% (>= 4.0%) [OK]
       Delivery: 4.35% (>= 4.0%) [OK]
    Stock-Level: 4.34% (>= 4.0%) [OK]
 [response time (at least 90% passed)]
      New-Order: 0.00%  [NG] *
        Payment: 48.95%  [NG] *
   Order-Status: 99.19%  [OK]
       Delivery: 99.87%  [OK]
    Stock-Level: 0.00%  [NG] *
```
tpcc对每一种事务的比例有要求,因此 transaction percentage 这个检查项,是用来检查tpcc测试结束后,每一种事务所在的比例是否合乎要求。
tpcc-mysql 规定了每一种事务的最大请求延迟。在 Raw Results 最后的括号中,为5、5、5、80、20。 tpcc-mysql要求,每一种事务必须有90%的事务的请求延迟,在这个规定范围内。如果达到要求这报告ok,否则则报告错误。从上面内容可见,只有Order-Status、Delivery这两种事务符合要求,其他三种都不满足(NG)。

Tpcc-mysql 结果解读的更多相关文章

  1. Mysql Explain 解读(基于MySQL 5.6.36)

    Mysql Explain 解读(基于MySQL 5.6.36) 1.语法 explain < table_name > #例子 explain select * from t3 wher ...

  2. 《高性能Mysql》解读---Mysql的事务和多版本并发

    1.base:ACID属性,并发控制 2.MySql事务的隔离级别有哪些,含义是什么? 3.锁知多少,读锁,写锁,排他锁,共享锁,间隙锁,乐观锁,悲观锁. 4.Mysql的事务与锁有什么关联?MySq ...

  3. mysql架构解读~mysql的多源复制

    一 场景需求 多源复制版本 5.7,目标主机5.6.21 4个DB机器的某些数据库需要数据汇总进行连表查询 二 进行搭建  1 导出相应的目的库     mysqldump -uuser -ppass ...

  4. 小菜菜mysql练习解读分析1——查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

    查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 好的,第一道题,刚开始做,就栽了个跟头,爽歪歪,至于怎么栽跟头的 ——需要分析题目,查询的是 ...

  5. MySQL源代码解读

    第一步: 下载bison-2.4.1-setup.exe链接地址 第二步: 下载cmake-2.8.6-win32-x86.exe链接地址 第三步: 下载MySQL链接地址 G:\Mlearn\mys ...

  6. MySQL 详细解读undo log :insert undo,update undo

    转自aobao.org/monthly/2015/04/01/ 本文是对整个Undo生命周期过程的阐述,代码分析基于当前最新的MySQL5.7版本.本文也可以作为了解整个Undo模块的代码导读.由于涉 ...

  7. 小菜菜mysql练习解读分析2——查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

    “查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )” ——翻译为:课程表里面,存在01的信息,未必满足有02的课程情况 ...

  8. MySQL 常用工具sysbench/fio/tpcc等测试

    为什么要压力测试采购新设备,评估新设备性能开发新项目,评估数据库容量新系统上线前,预估/模拟数据库负载更换数据库版本,评估性能变化 关注指标  CPU %wait,%user,%sys 内存 只内存读 ...

  9. mysql基准测试工具tpcc-mysql安装、使用、结果解读

    TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于My ...

  10. 03:TPCC 基准压测my.cnf

    line: V1.3 mail: gczheng@139.com date: 2017-11-09 一.TPCC测试前准备 1.压测环境 配置 信息 主机 Dell PowerEdge R730xd ...

随机推荐

  1. Python 安装包时选择 python版本

    安装了两个版本的python 其中一个版本为2.7 专门为python 2.7安装包使用的语句为 升级pip E:\Python27\python -m pip install --upgrade p ...

  2. vi 使用系统剪贴板(clipboard)

    ref : https://www.jianshu.com/p/771b95e34293 http://www.bubuko.com/infodetail-469867.html 在vi中,如果编译时 ...

  3. Android Studio 代码页跳界面 /java和XML快速切换技巧

    https://www.cnblogs.com/simadi/p/6698666.html?utm_source=itdadao&utm_medium=referral 今天又发现了一个And ...

  4. web.xml 转 学习!http://www.cnblogs.com/wkrbky/p/5929943.html

    1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLoaderListener(l ...

  5. Shell学习笔记:awk实现group by分组统计功能

    日常部分数据以 txt 的文件格式提供,为避免入库之后再进行统计的麻烦,故学习 shell 进行处理,减少工作量. 1.样例数据 # test.txt YD5Gxxx|6618151|68254490 ...

  6. VS code C++代码没有自动提示

    用了一段时间的VS code,发现一直都没有代码提示,奇了个怪?可能是插件有问题,于是重装C/C++,clang...等插件.结果......没用,

  7. 使用apache的HttpClient进行http通讯,隐藏的HTTP请求头部字段是如何自动被添加的

    我们用apache的HttpClient这个库消费云端的Restful API时,一般都需要两次HTTP调用,第一次获得某种token,比如获取防止跨域请求伪造攻击Cross-site request ...

  8. Linux下源码包安装Swoole及基本使用 转

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/msllws/article/details ...

  9. 使用RevitNet操作多个版本的Revit

    在Revit二次开发中,如果只是简单的从模型中提取数据或不需要界面对Revit进行修改,我们一般使用RevitNet. 如果对RevitNet不熟悉的,请参考:RevitAPI进阶之独立进程内读取.写 ...

  10. linux 安装 wkhtmltox

    linux安装wkhtmltox wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox- ...