免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1715 | 回复: 1
打印 上一主题 下一主题

TPCC-MySQL压测方法 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-07-11 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-10 13:44 |只看该作者 |倒序浏览
背景   
    成为一名合格的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来寻找最佳配置。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-23 11:06 |只看该作者
压力测试,可以收藏。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP