zoukankan      html  css  js  c++  java
  • MySQL-tpcc测试

    tpcc使用说明

    说明:文章内容起源于网络并结合自己的实验而得;但参考的文章地址当时没记录下来,如果发现有侵权问题,请留言。

    一、介绍

    压力测试是指在MySQL上线前,需要进行大量的压力测试,从而达到交付的标准。压力测试不仅可以测试MySQL服务的稳定性,还可以测试出MySQL和系统的瓶颈。

    TPCC测试:Transaction Processing Performance Council,要熟练使用TPC是一系列事务处理和数据库基准测试的规范。其中TPC-C是针对OLTP的基准测试模型,一方面可以衡量数据库的性能,另一方面可以衡量硬件性价比,也是广泛应用并关注的一种测试模型。

    TPC-C测试模型给基准测试提供了一种统一的测试标准,并非实际应用系统中的真实测试结果,但通过测试结果,可以大体观察出MySQL数据库服务稳定性、性能以及系统性能等一系列问题。TPC-C仅仅是一个测试模型,而在实际测试中,需要参考和使用一些测试工具,对系统和MySQL数据库进行压力测试、稳定性测试。

    TPC-C模型是以一个在线零售业为例,设计的一种模型,具体架构图参考
    tpcc测试库数据比例图
    tpcc使用说明

    tpcc测试库数据表关系图
    tpcc使用说明

    二、编译安装

    1、下载地址

    https://github.com/Percona-Lab/tpcc-mysql

    2、修改程序,以实现对MGR的支持

    如果是测试MGR模式,则需要手动修改与history表相关内容,因为该表没有主键,而MGR却要求表必须有主键:否则,可跳过。

    # unzip tpcc-mysql-master.zip

    1)在建表语句中,新增主键列:

    # vim tpcc-mysql-master/create_table.sql 

    大约在62行处为history表的建表语句;在其中添加建立主键id的语句:

    create table history (
    id bigint not null auto_increment,  -- 新增id自增列
    h_c_id int,
    h_c_d_id tinyint,
    h_c_w_id smallint,
    h_d_id tinyint,
    h_w_id smallint,
    h_date datetime,
    h_amount decimal(6,2),
    h_data varchar(24),
    PRIMARY KEY (id) -- 新增主键(注意与上一行的逗号分隔)
    ) Engine=InnoDB;

    2)修改INSERT语句

    # vim tpcc-mysql-master/src/load.c

    大约在234行处为history表的INSERT语句,修改为如下内容:

    "INSERT INTO history values(null,?,?,?,?,?,?,?,?)",  48) ) goto Error_SqlCall_close; 

    修改说明:
    对主键列id在插入时新增null值,以便id自增;
    将记录原INSERT语句字符数校验的数字从43改为48;

    以上2不修改完成后可以继续,执行编译了。

    ## 创建数据库及导入表结构

    create  database tpcc  charset=utf8mb4

    mysql -h192.16.1.100 -uroot -p123456 tpcc <create_table.sql

    表关系如下:

    tpcc创建了九张测试表:
    客 户:customer 表
    地 区:district 表
    商 品:item 表
    历史订单:history 表
    新订单 :new_orders 表
    订单状态:order_line 表
    订 单:orders 表
    库存状态:stock 表
    仓 库:warehouse 表

    tpcc-mysql的业务逻辑及其相关的几个表作用如下:
    New-Order==>新订单,一次完整的订单事务,几乎涉及到全部表
    Payment ==>支付,主要对应 orders、history 表
    Order-Status==>订单状态,主要对应 orders、order_line 表
    Delivery ==>发货,主要对应 order_line 表
    Stock-Level==>库存,主要对应 stock 表

    ## 导入数据

    ./tpcc_load -h 192.168.1.100 -P 3306 -d tpcc -u root -p '123456' -w 5 

    并行导入数据,修改load.sh

    export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql/
    DBNAME=$1
    WH=$2
    HOST=192.168.1.100
    user=root
    password=123456
    STEP=50
    
    ./tpcc_load $HOST $DBNAME $user $password $WH 1 1 $WH >> 1.out &
    
    x=1
    
    while [ $x -le $WH ]
    do
     echo $x $(( $x + $STEP - 1 ))
    ./tpcc_load $HOST $DBNAME $user $password $WH 2 $x $(( $x + $STEP - 1 ))  >> 2_$x.out &
    ./tpcc_load $HOST $DBNAME $user $password $WH 3 $x $(( $x + $STEP - 1 ))  >> 3_$x.out &
    ./tpcc_load $HOST $DBNAME $user $password $WH 4 $x $(( $x + $STEP - 1 ))  >> 4_$x.out &
     x=$(( $x + $STEP ))
    done

    ## 模拟压测

    ./tpcc_start -h192.168.1.100 -P 3306 -tpcc -uroot -p '123456' -w 5 -c 32 -r 10 -l 30 -i 10 -f tpcc_mysql.log -t tpcc_mysql.rtx

    -h:测试主机
    -d:测试的数据库
    -u:测试的用户
    -p:测试用户的密码
    -w:测试的warehouse数
    -c:测试的连接线程数
    -r:预热时间,warmup_time,以秒为单位,默认是10秒,目的是为了将数据加载到内存
    -l:测试时间,默认为20秒
    -i:report_interval指定生成报告的间隔时间
    -f:report_file将测试中各项操作的记录输出到指定文件内保存
    -t:trx_file输出更详细的操作信息到指定文件内保存

    备注:
    真实测试场景中,建议预热时间不小于3分钟,持续压测时长不小于20分钟,否则测试数据可能不具参考意义。

     

    螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
  • 相关阅读:
    springboot+swagger生成api文档
    字符串格式化
    Navicat过期
    网页版的支付宝授权登录(vue+java)
    window,sts安装python
    PageHelper分页+排序
    android那些事之Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系
    两种解析JSON的方法
    蓝牙那些事之远程设备
    蓝牙那些事之状态监听
  • 原文地址:https://www.cnblogs.com/lovezhr/p/14505110.html
Copyright © 2011-2022 走看看