原文: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学习-25 函数递归

    递归 例如: def abc(n): print(n) if int(n/2) == 0: return n return abc(int(n/2)) abc(10) 运行结果: 10 5 2 1 P ...

  2. python中的 __inti__ 和 __new__ 方法的区别

    这个要从Python的面向对象实例化的过程说起 类名() 之后,开辟一块内存空间,然后调用__init__把空间的内存地址作为self的参数传递到函数的内部,所有和self有关的参数,属性都会和sel ...

  3. //统计报表-供水量统计主列表分页查询 Element-ui的分页插件

    <!-- //分页 --> <div class="pagination">时间(月) <el-pagination @current-change= ...

  4. asp.net core-9.依赖注入的使用

    http://www.jessetalk.cn/2017/11/06/di-in-aspnetcore/

  5. centos7搭建EFK日志分析系统

    前言 EFK可能都不熟悉,实际上EFK是大名鼎鼎的日志系统ELK的一个变种 在没有分布式日志的时候,每次出问题了需要查询日志的时候,需要登录到Linux服务器,使用命令cat -n xxxx|grep ...

  6. archive_lag_target参数

    需求,由于一套生产环境归档日志切换频率过低,建议修改参数,使其间隔一定时间周期自动切换生成归档日志; SQL>; THREAD# SEQUENCE# TO_CHAR(COMPLETION_TIM ...

  7. MySql数据库 优化

    MySQL数据库优化方案 Mysql的优化,大体可以分为三部分:索引的优化,sql慢查询的优化,表的优化. 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更 ...

  8. Interlocked

    Interlocked MSDN 描述:为多个线程共享的变量提供原子操作.主要函数如下: Interlocked.Increment 原子操作,递增指定变量的值并存储结果.Interlocked.De ...

  9. QMap里面的值任然是一个QMap,在做循环插入的时候需要记得清空。

    这个问题是我以前的一个问题,当时由于有其他的事情去处理就忘记了,前段时间我的项目要进行集成测试了,为了避免这个缺陷,只能再把这个问题想起来了,再进行解决.有很多问题你觉得不应该发生,其实很多时候都是逻 ...

  10. (一)Centos之VMware虚拟机安装

    一.下载 64位的VM12 安装包: http://pan.baidu.com/s/1bpzoXQZ 二.安装 点击下一步: 老规矩,打勾,下一步: 这里我们新建一个文件夹 VM12 最好放在D盘或者 ...