• tpcc-mysql的安装和使用


    tpcc-mysql介绍

          TPC(Tracsaction Processing Performance Council) 事务处理性能协会是一个评价大型数据库系统软硬件性能的非盈利的组织,TPC-C是TPC协会制定的,用来测试典型的复杂OLTP系统的性能。Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试.

    安装与使用

    官网地址:https://github.com/Percona-Lab/tpcc-mysql

    实验环境:阿里云轻量应用服务器

    步骤:

    1)下载源代码

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

    2)编译

    在编译之前需要安装mysql和mysql编译时链接的库

    sudo apt-get install mysql-server
    sudo apt-get install mysql-client 
    sudo apt-get install libmysqlclient-dev
    cd tpcc-mysql/src
    make

    编译完成后会生成两个可执行文件,tpcc_load是导入数据的脚本,tpcc_start是执行测试的脚本.

    3) 加载数据

    • 创建数据库  mysqladmin -u root -p passwd create tpcc1000
    • 创建表  mysql tpcc1000 < create_table.sql
    • 创建相关索引和主外键(这一步也可以在加载数据之后完成) mysql tpcc1000 < add_fkey_idx.sql
    • 填充数据
      • 简单的步骤是 ./tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p passwd -w 100 ,可以通过tpcc_load --help 查看所有的选项,最后一个参数是仓库的个数,例如创建100个仓库(warehouse)并填充数据
      • 加载数据比较慢(20分钟),可用loah.sh 脚本并行加载,后面有写

    显示一下创建的表:

    $mysql -uroot -p -e "show tables from  TPCC"
    +--------------------+
    | Tables_in_tpcctest |
    +--------------------+
    | customer           |
    | district           |
    | history            |
    | item               |
    | new_orders         |
    | order_line         |
    | orders             |
    | stock              |
    | warehouse          |
    +--------------------+

    4)开始基准测

    • ./tpcc_start -h 127.0.0.1 -p 3306 -d tpcc1000 -u root -p "123123" -w 100 -c 10 -r 100 -l 300 -i 20 -f /var/log/tpcc_mysql.log -t /var/log/tpcc_mysql.rtx
    • |hostname| |port| |dbname| |user| |WAREHOUSES| |CONNECTIONS| |WARMUP TIME| |BENCHMARK TIME|
    • pcc_start --help 查看所有选项

     参数说明:
    -w warehouse 仓库;
    -c 连接数;
    -r warmup_time:指定预热时间,以秒为单位,默认是10秒,主要目的是为了将数据加载到内存;
    -l running_time:指定测试执行时间,以秒为单位,默认是20秒;
    -i report_interval:指定生产报告的时间间隔,默认是10秒,我这里设置了20秒;
    -f report_file:将测试中各项操作的记录输出到指定文件内保存;
    -t trx_file:输出更详细的操作信息到指定文件内保存;

     结果解读

     见下一篇博客 tpcc-mysql运行结果解读

    至此基本的已经完成,没有遇到问题不用往下看了

    并发加载数据

     单进程加载

    ./tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p passwd -w 100

     并发加载

    需要根据你的实际情况修改一下(主要是改密码

    方法一

    ./load.sh tpcc1000 100

    通过load.sh并发加载数据(创建100个warsehouse)

    造数据成功后,会提示:…DATA LOADING COMPLETED SUCCESSFULLY.

    方法二

    GitHub上另一个并行加载脚本: https://gist.github.com/sh2/3458844

    根据实际情况情况修改用户名、密码、数据库名,初始仓库为10个。

    由于最新版本tpcc_load使用方法需要显示使用参数,修改脚本如下

    vim tpcc_load_parallel.sh

     1 #!/bin/bash
     2 
     3 # Configration
     4 
     5 MYSQL=/usr/bin/mysql
     6 TPCCLOAD=./tpcc_load
     7 TABLESQL=./create_table.sql
     8 CONSTRAINTSQL=./add_fkey_idx.sql
     9 DEGREE=`getconf _NPROCESSORS_ONLN`
    10 
    11 SERVER=localhost
    12 DATABASE=tpcc1000
    13 USER=root
    14 PASS=123123
    15 WAREHOUSE=10
    16 
    17 # Load
    18 
    19 set -e
    20 $MYSQL -u $USER -p$PASS -e "DROP DATABASE IF EXISTS $DATABASE"
    21 $MYSQL -u $USER -p$PASS -e "CREATE DATABASE $DATABASE"
    22 $MYSQL -u $USER -p$PASS $DATABASE < $TABLESQL
    23 $MYSQL -u $USER -p$PASS $DATABASE < $CONSTRAINTSQL
    24 
    25 echo 'Loading item ...'
    26 $TPCCLOAD  -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 1 1 -n $WAREHOUSE > /dev/null
    27 
    28 set +e
    29 STATUS=0
    30 trap 'STATUS=1; kill 0' INT TERM
    31 
    32 for ((WID = 1; WID <= WAREHOUSE; WID++)); do
    33     echo "Loading warehouse id $WID ..."
    34     
    35     (
    36         set -e
    37         
    38         # warehouse, stock, district
    39         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 2 -m $WID  -n $WID > /dev/null
    40         
    41         # customer, history
    42         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 3 -m $WID  -n $WID > /dev/null
    43         
    44         # orders, new_orders, order_line
    45         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 4 -m $WID  -n $WID > /dev/null
    46     ) &
    47     
    48     PIDLIST=(${PIDLIST[@]} $!)
    49     
    50     if [ $((WID % DEGREE)) -eq 0 ]; then
    51         for PID in ${PIDLIST[@]}; do
    52             wait $PID
    53             
    54             if [ $? -ne 0 ]; then
    55                 STATUS=1
    56             fi
    57         done
    58         
    59         if [ $STATUS -ne 0 ]; then
    60             exit $STATUS
    61         fi
    62         
    63         PIDLIST=()
    64     fi
    65 done
    66 
    67 for PID in ${PIDLIST[@]}; do
    68     wait $PID
    69     
    70     if [ $? -ne 0 ]; then
    71         STATUS=1
    72     fi
    73 done
    74 
    75 if [ $STATUS -eq 0 ]; then
    76     echo 'Completed.'
    77 fi
    78 
    79 exit $STATUS
    tpcc_load_parallel.sh

     遇到的几个问题

    1. 需要安装mysql,对应的链接库也要安装,makefile中需要(不然make命令报错)

    !sudo apt-get install mysql-server          //服务端
    !sudo apt-get install mysql-client          //客户端
    !sudo apt-get install libmysqlclient-dev    //程序编译时链接的库

    2. 执行 tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p "" -w 100时,报错ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    解决方法:

    方法很简单,查看一下user表,错误的起因就是在这里, root的plugin被修改成了auth_socket,用密码登陆的plugin应该是mysql_native_password。(由于可以用sudo mysql -uroot -p进入,所以并不需要以安全模式启动)

    mysql> select user, plugin from mysql.user;
    +-----------+-----------------------+
    | user      | plugin                |
    +-----------+-----------------------+
    | root      | auth_socket           |
    | mysql.sys | mysql_native_password |
    | dev       | mysql_native_password |
    +-----------+-----------------------+
    3 rows in set (0.01 sec)

    只要把auth_socket改成mysql_native_password就行了:

    mysql> update mysql.user set authentication_string=PASSWORD('mima'), 
    plugin='mysql_native_password' where user='root';
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    之后退出mysql,重启一下,就可以了.

    原因应该是安装时没有给root设置密码,但是步骤3的前三个命令默认无密码...,直接运行会报错:

    root@iZj6c9c6vaqj1i0a9j7h78Z:/home/admin/tpcc-mysql# mysqladmin create tpcc1000
    mysqladmin: connect to server at 'localhost' failed

    只需再后面加上 -p密码 ,警告不安全可不管。 

    参考链接:

     1. https://www.jianshu.com/p/2b63c65caf6a

     2. https://blog.51cto.com/goome/1958328

     3. 官网教程 https://github.com/Percona-Lab/tpcc-mysql

  • 相关阅读:
    PyQt4 调用串口API pySerial API说明
    树的计算
    数据结构单链表实现
    虚函数和抽象函数
    静态内存和堆栈
    二叉树学习图片---郝斌
    汉诺塔
    循环队列的实现
    队列的实现
    栈的应用
  • 原文地址:https://www.cnblogs.com/lfri/p/10724943.html
Copyright © 2020-2023  润新知