原文: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. Django之ORM表操作

    ORM表操作 1.ORM单表操作 首先想操作表的增删改查,需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import models def ...

  2. java——数据类型和运算符

    强类型语言 Java语言是一门强类型语言.强类型包含两方面的含义:①所有的变量必须先声明.后使用:②指定类型的变量只能接受类型与之匹配的值.强类型语言可以在编译过程中发现源代码的错误,从而保证程序更加 ...

  3. MarkdownPad2安装与破解-转载

    MarkdownPad安装包下载链接链接:https://pan.baidu.com/s/1o7c4W7C2d8zCPh5z7y4IvQ提取码:e4bf 下载解压之后,找要MarkdownPad2.e ...

  4. (一)easyUI之第一个demo

    一.下载 官网下载 : http://www.jeasyui.net/download/   同时并下载官方中文API文档. 解压后的目录结构: 二.第一个demo 1      新建工程并导入包 2 ...

  5. Java 实现简单的 RPC 框架

    RPC 简介 RPC,全称为 Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式,而不需要了解底层网络技术 ...

  6. 3D数学基础_图形与游戏开发

    https://blog.csdn.net/popy007/article/list/2?t=1&  //向量计算相关文章 https://www.baidu.com/link?url=48C ...

  7. IOC实现-Unity

    .NET中实现IOC有很多方式,比如:Unity.Ninject.Autofac.MEFNinject的实现参考<Pro ASP.NET MVC3.5 FrameWork>下面给出的是Un ...

  8. pycharm2019.2永久激活

    Pycharm2019.2永久激活Pycharm官网在不到两个月内与2019.7.24更新到最新版本pycharm2019.2,不可说更新不快,对于"喜新厌旧"的我怎能错过新版本呢 ...

  9. 抓某音乐播放器时现在多了个vkey,导致播放地址有问题,如何抓到vkey

    一:在已经通过axios和vue-cli本地服express通过地址获取到songmid这个参数 在js里面地址和参数如下: // 获取歌手和歌曲的详细信息 export function getSi ...

  10. TypeScript入门八:TypeScript的命名空间

    初识命名空间(namespace指令) 命名空间与文件拆分 多重命名空间与三斜杠指令引入依赖文件 一.初识命名空间(namespace指令) TypeScript的命名空间可以说就是ES6的模块化,其 ...