• tpcc-mysql 实践


    一、TPCC 介绍

      • TPC:
        全称Transaction Processing Performance Council (事务处理性能委员会),是一家非盈利性组织,该组织制定各种商业应用的基准测试规范,任意厂商和个人,都可以按照其规范来开发自己的应用程序。
      • 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 ~
    # bzr branch lp:~percona-dev/perconatools/tpcc-mysql
    

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

    3.编译安装 tpcc-mysql

    # cd ~/tpcc-mysql/src/
    # make 
    

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

     三、tpcc-mysql 使用

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

    1.创建表和索引

    创建库:

    # mysql -uroot -p123123 -h127.0.0.1 -e "create database tpcc;"
    

    创建表结构:

    # mysql -uroot -p123123 -h127.0.0.1 tpcc < ~/tpcc-mysql/create_table.sql 
    

    创建索引:

    # mysql -uroot -p123123 -h127.0.0.1 tpcc < ~/tpcc-mysql/add_fkey_idx.sql 
    

    表的介绍:

    # mysql -uroot -p123123 -h127.0.0.1 -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 127.0.0.1 tpcc root 123123 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 分钟,否则测试数据可能不具参考意义。

    # ~/tpcc-mysql/tpcc_start -h 127.0.0.1 -d tpcc -u root -p 123123 -w 10 -c 10 -r 120 -l 300 -f /tmp/tpcc_mysql.log -t /tmp/tpcc_mysql.rtx  
    

    输出结果如下:

      1 ***************************************
      2 *** ###easy### TPC-C Load Generator ***
      3 ***************************************
      4 option h with value '127.0.0.1'
      5 option d with value 'tpcc'
      6 option u with value 'root'
      7 option p with value '123123'
      8 option w with value '10'
      9 option c with value '10'
     10 option r with value '120'
     11 option l with value '300'
     12 option f with value '/tmp/tpcc_mysql.log'
     13 option t with value '/tmp/tpcc_mysql.rtx'
     14 <Parameters>
     15      [server]: 127.0.0.1
     16      [port]: 3306        
     17      [DBname]: tpcc
     18        [user]: root
     19        [pass]: 123123
     20   [warehouse]: 10
     21  [connection]: 10
     22      [rampup]: 120 (sec.)
     23     [measure]: 300 (sec.)
     24 
     25 RAMP-UP TIME.(120 sec.)   # 预热结束
     26 
     27 MEASURING START.        #开始压测
     28 
     29   10, 918(0):0.846|1.053, 917(0):0.179|0.314, 92(0):0.089|0.119, 91(0):0.989|1.
     30 134, 92(0):2.696|2.913
     31   20, 929(0):0.805|0.863, 927(0):0.167|0.177, 93(0):0.076|0.079, 93(0):0.909|0.
     32 913, 92(0):2.578|2.580
     33   30, 911(0):0.811|0.863, 917(0):0.165|0.202, 91(0):0.083|0.084, 91(0):0.934|0.
     34 942, 92(0):2.548|2.597
     35   40, 911(0):0.928|1.189, 907(0):0.200|0.249, 92(0):0.090|0.110, 91(0):1.037|1.
     36 277, 90(0):3.027|3.103
     37   50, 871(0):0.881|0.994, 875(0):0.184|0.208, 87(0):0.091|0.099, 87(0):0.996|0.
     38 997, 88(0):2.762|2.802
     39   60, 886(0):0.863|1.008, 883(0):0.184|0.208, 88(0):0.084|0.091, 89(0):0.958|0.
     40 990, 89(0):2.656|2.667
     41   70, 900(0):0.835|0.891, 900(0):0.177|0.188, 90(0):0.087|0.087, 90(0):0.997|1.
     42 007, 90(0):2.679|2.720
     43   80, 868(0):0.841|0.915, 866(0):0.168|0.192, 87(0):0.087|0.094, 87(0):0.950|0.
     44 953, 88(0):2.517|2.611
     45   90, 914(0):0.825|0.914, 916(0):0.168|0.244, 91(0):0.083|0.086, 90(0):0.928|0.
     46 935, 90(0):2.532|2.590
     47  100, 860(0):0.811|0.846, 861(0):0.171|0.205, 86(0):0.086|0.107, 86(0):0.954|0.
     48 956, 87(0):2.540|2.622
     49  110, 881(0):0.837|0.904, 875(0):0.175|0.192, 88(0):0.081|0.082, 89(0):0.941|0.
     50 949, 87(0):2.594|2.625
     51  120, 881(0):0.840|1.029, 882(0):0.176|0.196, 89(0):0.085|0.114, 88(0):0.962|0.
     52 969, 87(0):2.620|2.705
     53  130, 831(0):0.860|0.910, 835(0):0.182|0.328, 83(0):0.085|0.095, 83(0):0.994|1.
     54 008, 84(0):2.733|2.747
     55  140, 861(0):0.860|0.926, 855(0):0.184|0.231, 85(0):0.091|0.097, 86(0):0.983|0.
     56 985, 87(0):2.844|2.880
     57  150, 850(0):0.849|0.908, 852(0):0.183|0.198, 85(0):0.091|0.105, 85(0):0.996|1.
     58 012, 84(0):2.835|2.858
     59  160, 863(0):0.865|0.922, 867(0):0.179|0.242, 87(0):0.130|0.167, 87(0):1.038|1.
     60 067, 86(0):2.771|4.078
     61  170, 849(0):0.851|0.891, 850(0):0.178|0.259, 85(0):0.081|0.094, 84(0):0.976|0.
     62 978, 85(0):2.741|2.760
     63  180, 850(0):0.814|0.865, 850(0):0.170|0.181, 85(0):0.081|0.085, 86(0):0.928|0.
     64 935, 86(0):2.496|2.721
     65  190, 857(0):0.845|0.904, 855(0):0.174|0.190, 86(0):0.086|0.098, 86(0):0.973|1.
     66 006, 86(0):2.611|2.685
     67  200, 864(0):0.828|0.877, 866(0):0.173|0.250, 86(0):0.084|0.086, 86(0):0.949|0.
     68 954, 85(0):2.536|2.547
     69  210, 847(0):0.843|0.952, 847(0):0.177|0.201, 85(0):0.084|0.085, 85(0):0.960|0.
     70 994, 86(0):2.594|2.617
     71  220, 869(0):0.869|0.909, 869(0):0.180|0.219, 87(0):0.087|0.088, 87(0):1.004|1.
     72 014, 87(0):2.586|2.652
     73  230, 836(0):1.031|1.059, 834(0):0.207|0.225, 83(0):0.095|0.097, 83(0):1.164|1.
     74 220, 83(0):3.049|3.051
     75  240, 849(0):0.817|0.841, 848(0):0.172|0.234, 85(0):0.078|0.079, 85(0):0.922|0.
     76 929, 85(0):2.548|2.551
     77  250, 833(0):0.836|0.894, 838(0):0.173|0.230, 84(0):0.079|0.081, 83(0):0.952|0.
     78 981, 83(0):2.569|2.598
     79  260, 853(0):0.855|0.946, 849(0):0.177|0.224, 84(0):0.090|0.164, 86(0):1.029|1.
     80 036, 85(0):2.749|2.877
     81  270, 839(0):0.860|0.936, 840(0):0.194|0.221, 85(0):0.082|0.086, 83(0):0.970|0.
     82 980, 85(0):2.724|2.755
     83  280, 856(0):0.829|0.879, 854(0):0.175|0.221, 86(0):0.081|0.087, 86(0):0.944|0.
     84 945, 84(0):2.592|2.733
     85  290, 836(0):0.836|0.945, 838(0):0.176|0.238, 83(0):0.081|0.085, 84(0):0.951|0.
     86 958, 85(0):2.609|2.618
     87  300, 855(0):0.838|0.938, 853(0):0.172|0.200, 85(0):0.084|0.086, 85(0):0.940|0.
     88 964, 86(0):2.523|2.556
     89 
     90 STOPPING THREADS..........    # 压测结束
     91 
     92 <Raw Results>
     93   [0] sc:26028  lt:0  rt:0  fl:0 
     94   [1] sc:26026  lt:0  rt:0  fl:0 
     95   [2] sc:2603  lt:0  rt:0  fl:0 
     96   [3] sc:2602  lt:0  rt:0  fl:0 
     97   [4] sc:2604  lt:0  rt:0  fl:0 
     98  in 300 sec.
     99 
    100 <Raw Results2(sum ver.)>
    101   [0] sc:26028  lt:0  rt:0  fl:0 
    102   [1] sc:26026  lt:0  rt:0  fl:0 
    103   [2] sc:2603  lt:0  rt:0  fl:0 
    104   [3] sc:2602  lt:0  rt:0  fl:0 
    105   [4] sc:2604  lt:0  rt:0  fl:0 
    106 
    107 <Constraint Check> (all must be [OK])
    108  [transaction percentage]
    109         Payment: 43.48% (>=43.0%) [OK]
    110    Order-Status: 4.35% (>= 4.0%) [OK]
    111        Delivery: 4.35% (>= 4.0%) [OK]
    112     Stock-Level: 4.35% (>= 4.0%) [OK]
    113  [response time (at least 90% passed)]   #都ok,hh
    114       New-Order: 100.00%  [OK]
    115         Payment: 100.00%  [OK]
    116    Order-Status: 100.00%  [OK]
    117        Delivery: 100.00%  [OK]
    118     Stock-Level: 100.00%  [OK]
    119 
    120 <TpmC>
    121                  5205.600 TpmC          
    Output

    4.测试结果解读:

     第一部分:

    10, 918(0):0.846|1.053, 917(0):0.179|0.314, 92(0):0.089|0.119, 91(0):0.989|1.134, 92(0):2.696|2.913
    20, 929(0):0.805|0.863, 927(0):0.167|0.177, 93(0):0.076|0.079, 93(0):0.909|0.913, 92(0):2.578|2.580
    30, 911(0):0.811|0.863, 917(0):0.165|0.202, 91(0):0.083|0.084, 91(0):0.934|0.942, 92(0):2.548|2.597
    ......
    290, 836(0):0.836|0.945, 838(0):0.176|0.238, 83(0):0.081|0.085, 84(0):0.951|0.958, 85(0):2.609|2.618
    300, 855(0):0.838|0.938, 853(0):0.172|0.200, 85(0):0.084|0.086, 85(0):0.940|0.964, 86(0):2.523|2.556

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

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

    第二部分:

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

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

    <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.35% (>= 4.0%) [OK]    # 库存相关业务占比
     [response time (at least 90% passed)]   #都ok,hh
          New-Order: 100.00%  [OK]
            Payment: 100.00%  [OK]
       Order-Status: 100.00%  [OK]
           Delivery: 100.00%  [OK]
        Stock-Level: 100.00%  [OK]

    第四部分:

    <TpmC>
                     5205.600 TpmC          

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

    (图形展示,尝试了好久失败了,果然烂尾)

    参考链接:http://www.unixfbi.com/380.html#3

  • 相关阅读:
    单链表的相关操作
    R学习-- 数组和矩阵
    UIButton 设置圆角 边框颜色 点击回调方法
    【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml
    聊一聊多源最短路径问题(仅仅有5行代码哦)
    Android cookies正确的更新方式
    Android IntentService的使用和源代码分析
    Android应用之——最新版本号SDK V2.4实现QQ第三方登录
    嵌套路由
    我自己用
  • 原文地址:https://www.cnblogs.com/lfri/p/10735739.html
Copyright © 2020-2023  润新知