mysql评测工具TPC-C使用,和基于TPCC的Benchmarksql评测工具

安装成功mysql之后,下载TPC-C进行评测。

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

make的时候下面的报错,应该是因为这个问题( you should have mysql_config available in $PATH)

load.c:19:19: fatal error: mysql.h: No such file or directory
 #include <mysql.h>

因此根据括号中问题,执行下面指令:

yum install mysql-devel

重新make,成功!

然后mysql -uroot -p,进入mysql命令行:

mysql> create database tpcc;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tpcc <--- 新增的    |
+--------------------+

然后执行exit,退出mysql命令行:

mysql -uroot -p****** -D tpcc < create_table.sql(******表示密码)
mysql -uroot -p****** -D tpcc < add_fkey_idx.sql
mysql -uroot -p****** -e "show tables from tpcc"

显示tpcc的表结构:(参数: -D:数据库名称 -p 密码)

mysql> show tables;
+----------------+
| Tables_in_tpcc |
+----------------+
| customer       |
| district       |
| history        |
| item           |
| new_orders     |
| order_line     |
| orders         |
| stock          |
| warehouse      |
+----------------+

单进程load:(-w 指定测试库下的仓库数量)真实测试场景中,仓库数一般不少于100个,视硬件配置而定,如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,建议最少不低于1000个。

./tpcc_load -h 127.0.0.1 -P 3306 -d tpcc -u root -p ****** -w 10
(******为密码)

load-start进行负载测试:

真实测试场景中,建议预热时间不小于 300s,持续压测时长不小于1800s,否则测试数据可能不具参考意义。

-r:指定预热时间。默认是 10 秒,主要目的是为了将数据加载到内存。

-l:指定测试执行的时间,默认是 20 秒。

-i :指定生成报告的间隔时间。

-f :将测试中各项操作的记录输出到指定文件内保存。

-t :输出更详细的操作信息到指定文件内保存。

直接使用TPCC对mysql进行评测无法控制write/update/read之间的比例,因此使用benchmarksql对mysql进行评测,通过控制参数控制write、read的比例。

在现在benchmarksql之前首先安装ant。

yum install ant

然后下载benchmark,支持mysql的(如果下面的github无法正常下载,点击直接下载):

git clone -b 5.0-mysql-support-opt https://github.com/jackysp/benchmarksql.git

然后执行下面操作:

[root@GPUNode utils]# cd benchmarksql
[root@GPUNode benchmarksql]# ant
[root@GPUNode benchmarksql]# cd run
[root@GPUNode run]# ./runSQL.sh props.mysql sql.mysql/tableCreates.sql

报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. 主要是因为版本的问题,需要修改props.mysql参数文件,修改driver设置。

db=mysql
driver=com.mysql.cj.jdbc.Driver
conn=jdbc:mysql://localhost:3306/tpcc?useUnicode=true&characterEncoding=utf8&serverTimezone=EDT
user=root
password=123456

由于系统时区是EDT,我就设置serverTimezone=EDT,但是会报错:The server time zone value 'EDT' is unrecognized or represents more than one time zone. 是因为mysql中没有时区EDT,因此将serverTimezone=EDT改为serverTimezone=GMT。

db=mysql
driver=com.mysql.cj.jdbc.Driver
conn=jdbc:mysql://localhost:3306/tpcc?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user=root
password=123456

然后运行下面指令即可。

[root@GPUNode run]# ./runDatabaseBuild.sh props.mysql
[root@GPUNode run]# ./runBenchmark.sh props.mysql

props.mysql参数解析:

  • New-Order:新订单,一次完整的订单事务,几乎涉及到全部表
  • Payment:支付,主要对应orders、history表
  • Order-Status:订单状态,主要对应 orders、order_line表
  • Delivery:发货,主要对应order_line表
  • Stock-Level:库存,主要对应stock表
db=mysql //表示需要测试的数据库
driver=com.mysql.cj.jdbc.Driver //数据库驱动
//表示ip,端口,其中tpcc表示连接的数据库名称
conn=jdbc:mysql://localhost:3306/tpcc?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user=root //mysql账号
password=123456 //mysql密码
warehouses=1 //仓库数量,每个warehouse大小大概是100MB,如果设置为10,那整个数据库的大小大概在1000MB。建议将数据库的大小设置为服务器物理内存的2-5倍,如果服务器内存为16GB,那么warehouse设置建议在328~819之间。(1024 * 16 / 100) * 2 = 328
loadWorkers=4 // 用于在数据库中初始化数据的加载进程数量,默认为4,加载速度会随worker数量的增加而有所提升

terminals=1 //终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍
runTxnsPerTerminal=0 //每个terminal运行的固定事务数量,eg:该值设置为10,表示每个terminal运行10个事务,该参数配置为非0值时,下面的runMins必须设置为0
runMins=10 //要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
limitTxnsPerMin=0 //每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响。如果terminals数量大于limitTxnsPerMin值,意味着并发数大于每分钟事务总数,该参数会失效,如果有1000个并发同时发起,那每分钟事务数设置为300就没意义了,上来就是1000个并发,所以要让该参数有效,可以设置数量大于并发数,或者让其失效,测试过程中目前采用的是默认300。

terminalWarehouseFixed=true//终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。

//下面五个值的总和必须等于100,默认值为:45, 43, 4, 4, 4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

//测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹。
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
//操作系统性能收集脚本,默认无需修改,需要操作系统具备有python环境
//osCollectorScript=./misc/os_collector_linux.py
//操作系统收集操作间隔,默认为1秒
//osCollectorInterval=1
//操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名。
//osCollectorSSHAddr=user@dbhost
 //操作系统中被收集服务器的网卡名称和磁盘名称,例如:使用ifconfig查看操作系统网卡名称,找到测试所走的网卡,名称为enp1s0f0,那么下面网卡名设置为net_enp1s0f0(net_前缀固定);使用df -h查看数据库数据目录。
//osCollectorDevices=net_eth0 blk_sda

重新运行:执行runDatabaseDestroy.sh脚本带配置文件可以将所有的数据和表都删除,然后再重新修改配置文件,重新运行build和benchmark脚本进行新一轮测试。

 [root@GPUNode run]# ./runDatabaseDestroy.sh props.mysql
 [root@GPUNode run]# ./runDatabaseBuild.sh props.mysql

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章