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

 #!/bin/bash

 # Configration

 MYSQL=/usr/bin/mysql
TPCCLOAD=./tpcc_load
TABLESQL=./create_table.sql
CONSTRAINTSQL=./add_fkey_idx.sql
DEGREE=`getconf _NPROCESSORS_ONLN` SERVER=localhost
DATABASE=tpcc1000
USER=root
PASS=123123
WAREHOUSE=10 # Load set -e
$MYSQL -u $USER -p$PASS -e "DROP DATABASE IF EXISTS $DATABASE"
$MYSQL -u $USER -p$PASS -e "CREATE DATABASE $DATABASE"
$MYSQL -u $USER -p$PASS $DATABASE < $TABLESQL
$MYSQL -u $USER -p$PASS $DATABASE < $CONSTRAINTSQL echo 'Loading item ...'
$TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 1 1 -n $WAREHOUSE > /dev/null set +e
STATUS=0
trap 'STATUS=1; kill 0' INT TERM for ((WID = 1; WID <= WAREHOUSE; WID++)); do
echo "Loading warehouse id $WID ..." (
set -e # warehouse, stock, district
$TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 2 -m $WID -n $WID > /dev/null # customer, history
$TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 3 -m $WID -n $WID > /dev/null # orders, new_orders, order_line
$TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 4 -m $WID -n $WID > /dev/null
) & PIDLIST=(${PIDLIST[@]} $!) if [ $((WID % DEGREE)) -eq 0 ]; then
for PID in ${PIDLIST[@]}; do
wait $PID if [ $? -ne 0 ]; then
STATUS=1
fi
done if [ $STATUS -ne 0 ]; then
exit $STATUS
fi PIDLIST=()
fi
done for PID in ${PIDLIST[@]}; do
wait $PID if [ $? -ne 0 ]; then
STATUS=1
fi
done if [ $STATUS -eq 0 ]; then
echo 'Completed.'
fi 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

最新文章

  1. 如何向非技术人(程序猿)解释SQL注入?
  2. JSON代码格式化 进行查询筛选
  3. 网页特殊符号HTML代码大全
  4. UVA 10407 差分思想的运用
  5. AU版有锁机的福利,704越狱彻底解决+86问题,完美IM/FT,重启不掉APN设置
  6. [转]从一行代码里面学点JavaScript
  7. mysql 的存储引擎
  8. jQuery获取Select选择的Text和 Value
  9. go pprof
  10. 隐私模式启动IE 谷歌浏览器
  11. 银行家算法java实现
  12. mac地址学习笔记
  13. VS中Ctrl+F5(开始执行不调试)一闪而过问题
  14. 和菜鸟一起学linux之DBUS基础学习记录
  15. android中Imageview的布局和使用
  16. Dos.Common
  17. mysql查询优化之一:mysql查询优化常用方式
  18. H5音乐播放器源码地址
  19. 转 Fira Code | 为写程序而生的字体
  20. Jq_input file标签上传图片到服务器

热门文章

  1. IE11浏览器中的My97日历控件刷新后无法打开问题解决办法
  2. hihocoder1475 数组分拆【DP+前缀和优化】
  3. 51nod1069【Nim取石子游戏】
  4. [Xcode 实际操作]六、媒体与动画-(10)UIView视图翻转动的画制作
  5. 利用sizeof,得到二维数组的维度
  6. background-attachment:fixed不兼容性
  7. NET Core 2.0 的 REST API
  8. (转)io优化
  9. JS filter使用
  10. 【转】说说Runnable与Callable