MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 3749|回复: 2
打印 上一主题 下一主题

TPCC-MySQL压测方法

[复制链接]
跳转到指定楼层
1#
发表于 2014-11-20 21:08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景   
    成为一名合格的DBA,你必须要知道的事情是:如何评估一套MySQL的性能,如何得到MySQL的最大QPS。
    为了确认好这两点,我们需要借助测试工具:TPCC-MySQL。

基础环境说明
   操作系统:SUSE Linux Enterprise Server 11
    CPU型号:Intel(R) Xeon(R) CPU E5-2658 0 @ 2.10GHz
    CPU线程数:8
    内存容量:24G
    MySQL版本:5.5.29-log MySQL Community Server (GPL)


工具安装

  • 安装前准备:
    1、服务器具备root权限,编译好make,gcc源码包。
    2、准备好MySQL的源码文件,并进行编译安装(下载地址:http://dev.mysql.com/downloads/mysql/5.6.html,选择Source Code)
    3、TPCC-mysql文件:见附件。


  • 安装:
    1、进入src目录
        LVS-BACKUP:/tmp/tpcc-mysql # cd src/
        LVS-BACKUP:/tmp/tpcc-mysql/src # ls
        Makefile    driver.c  main.c    ordstat.c     payment.c  rthist.h    sequence.h  spt_proc.c  support.c  trans_if.h
        delivery.c  load.c    neword.c  parse_port.h  rthist.c   sequence.c  slev.c      spt_proc.h  tpc.h

    2、修改Makefile,全路径指定mysql_config
        LVS-BACKUP:/tmp/tpcc-mysql/src # vim Makefile
        #
        # "make all" to build necessary executables.
        #
        LIBS=           `/usr/local/mysql/bin/mysql_config --libs_r` -lrt

        INC=            -I. `/usr/local/mysql/bin/mysql_config --include`

    3、执行make命令安装tpcc
        LVS-BACKUP:/tmp/tpcc-mysql/src # make
        cc -w -O2 -g -I. `/usr/local/mysql/bin/mysql_config --include`  -c load.c
        cc -w -O2 -g -I. `/usr/local/mysql/bin/mysql_config --include`  -c support.c
        cc load.o support.o `/usr/local/mysql/bin/mysql_config --libs_r` -lrt -o ../tpcc_load
        ...
        cc -w -O2 -g -I. `/usr/local/mysql/bin/mysql_config --include`  -c slev.c
        cc main.o spt_proc.o driver.o support.o sequence.o rthist.o neword.o payment.o ordstat.o delivery.o slev.o `/usr/local/mysql/bin/mysql_config --libs_r` -lrt -o ../tpcc_start

     4、第3步OK后,检查上一层目录是否生成可执行文件:tpcc_load和tpcc_start。

     5、添加软链接。
          LVS-BACKUP:/tmp/tpcc-mysql # ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

压测实施

1、原理简介
     主要通过预先准备好的建表语句(create_table.sql)及索引语句(add_fkey_idx.sql)来初始化数据库;
     然后通过程序tpcc_load来生成数据,通过tpcc_start模拟不同的INSERT,UPDATE,DELETE,SELECT场景来压测,最后根据统计的结果来判断MySQL的性能。

2、初始化脚本

    LVS-BACKUP:/tmp/tpcc-mysql # mysql

    Server version: 5.5.29-log MySQL Community Server (GPL)


     Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.


    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


    mysql> create database tpcc default charset utf8;

    Query OK, 1 row affected (0.00 sec)


    mysql> use tpcc

    Database changed

    mysql> source ./create_table.sql

    Query OK, 0 rows affected (0.00 sec)


    Query OK, 0 rows affected (0.00 sec)

    。。。省略其他


    mysql> source ./add_fkey_idx.sql

    Query OK, 0 rows affected (0.00 sec)


    Query OK, 0 rows affected (0.00 sec)

    。。。省略其他



3、初始化数据

        sh  -x load.sh tpcc 1

        说明:tpcc为新创建的库名,1为程序中WHILE循环的最大值,用于控制并发线程数。该过程会持续2个小时。完成后,简单统计各表的数据量如下:


        mysql> select table_name,table_rows from information_schema.tables where table_schema='tpcc';

        +------------+------------+
        | table_name | table_rows |
        +------------+------------+
        | customer   |    3016755 |
       | district   |        977 |
       | history    |    3000239 |
       | item       |     100256 |
       | new_orders |    1003675 |
        | order_line |   30567573 |
       | orders     |    2737577 |
       | stock      |   10009497 |
       | warehouse  |        100 |
       +------------+------------+
       9 rows in set (0.01 sec)


4、启动压测

        LVS-BACKUP:/tmp/tpcc-mysql # ./tpcc_start -h 127.0.0.1 -P 3306  -dtpcc -w100 -c100  -r10 -l500            (参数说明: -d用于指定库名称,-w用于指定随机仓库数量(warehouse表的数据量)   -c用于指定并发的线程数量   -r用于指定数据预热时间    -l用于指定程序执行时间


***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
...

MEASURING START.

  10, 166(0):2.151|3.090, 155(0):0.606|0.654, 15(0):0.262|0.278, 15(0):2.691|2.744, 17(0):6.593|7.064
...
500, 141(0):2.459|2.555, 146(0):0.629|0.716, 12(0):0.308|0.325, 11(0):3.116|3.165, 14(0):6.835|6.848

STOPPING THREADS....................................................................................................

<Raw Results>
  [0] sc:7092  lt:0  rt:0  fl:0
  [1] sc:7087  lt:0  rt:0  fl:0
  [2] sc:708  lt:0  rt:0  fl:0
  [3] sc:704  lt:0  rt:0  fl:0
  [4] sc:711  lt:0  rt:0  fl:0
in 500 sec.

<Raw Results2(sum ver.)>
  [0] sc:7094  lt:0  rt:0  fl:0
  [1] sc:7088  lt:0  rt:0  fl:0
  [2] sc:708  lt:0  rt:0  fl:0
  [3] sc:705  lt:0  rt:0  fl:0
  [4] sc:711  lt:0  rt:0  fl:0

<Constraint Check> (all must be [OK])
[transaction percentage]
        Payment: 43.47% (>=43.0%) [OK]
   Order-Status: 4.34% (>= 4.0%) [OK]
       Delivery: 4.32% (>= 4.0%) [OK]
    Stock-Level: 4.36% (>= 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>
                 851.040 TpmC



5、结果分析
    我们取出第4步的如下内容做分析:
    1、格式如:10,    166(0):2.151|3.090,     155(0):0.606|0.654,      15(0):0.262|0.278,      15(0):2.691|2.744,     17(0):6.593|7.064
        该值中共有6列,都以逗号分隔。每一列的含义是:
        第1列:第n轮10s。
        第2列:总成功执行的SQL次数(总推迟执行的SQL次数):90%事务的响应时间|本轮测试最大响应时间
        第3列:新订单业务成功执行次数(推迟执行次数):90%事务的响应时间|本轮测试最大响应时间
        第4列:支付业务的结果,后面几个的意义同上
        第5、6列:发货和库存的结果。
        一般关注第2列数据。
   
    2、格式如:
         <Raw Results>
          [0] sc:7092  lt:0  rt:0  fl:0   ( 值意义:New-Order业务成功(success,简写sc)次数,延迟(late,简写lt)次数,重试(retry,简写rt)次数,失败(failure,简写fl)次数  )
         [1] sc:7087  lt:0  rt:0  fl:0( 支付业务  )
         [2] sc:708  lt:0  rt:0  fl:0(  订单状态  )
         [3] sc:704  lt:0  rt:0  fl:0(  发货业务统计  )
         [4] sc:711  lt:0  rt:0  fl:0( 库存业务  )
         in 500 sec.

    3、格式如
        [transaction percentage]
        Payment: 43.47% (>=43.0%) [OK]
        Order-Status: 4.34% (>= 4.0%) [OK]
       Delivery: 4.32% (>= 4.0%) [OK]
       Stock-Level: 4.36% (>= 4.0%) [OK]
      [response time (at least 90% passed)]   (呵呵,我认为至少需要99%以上通过才行

     4、最终的TpmC,用于衡量MySQL的整体性能。(该值代表TPC-C的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数测量)
       <TpmC>
                 851.040 TpmC

后续优化
1、后续需要通过压测的线程数、压测时间来检查最终结果。时间越长,说服力越强。
    2、验证MySQL不同的版本对应的压测结果,找出最优的版本,作为后续现网的选型标准。
    2、同一MySQL版本下,通过调整InnoDB参数:innodb_buffer_pool_size   innodb_flush_log_at_trx_commit来寻找最佳配置。


参考:
http://blog.itpub.net/29254281/viewspace-1195589
http://17173ops.com/2014/10/12/tpcc-mysql-full-user-manual.shtml

tpcc-mysql.rar

188.07 KB, 下载次数: 1240

评分

1

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶1 踩
3#
发表于 2015-2-7 14:27:29 | 只看该作者

嗯,不错,对于新手很有帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-6 02:56 , Processed in 0.075751 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表