首页 > 数据库 > MySQL > 如何使用hammerdb进行MySQL基准测试
沃趣科技高级数据库工程师 罗小波
背景
服务器配置:960G sandisk单盘SSD,32 core,128G内存
数据库关键参数:innodb_buffer_pool_size=72G,双一,innodb_log_file_size=4G,innodb_log_buffer_size=128M,innodb_buffer_pool_instances=32
参考资料:
HammerDB是针对Oracle,Microsoft SQL Server,IBM DB2,TimesTen,MySQL,MariaDB,PostgreSQL,Postgres Plus Advanced Server等数据以及Greenplum,Redis,Amazon Aurora和Redshift以及Hadoop上的传统 SQL的开源数据库负载测试和基准测试工具。
可以模拟TPC-C测试模型(是在线事务处理OLTP的基准程序),主要用于模拟一个批发商的货物管理环境,测试结果由TPC-C吞吐率衡量,标准测试模型中的单位是tpmC(在hammerdb中,测试结果的单位是tpm,不是tpmC。tpm表示每分钟的事务交易数量。tpmC是TPC-C的事务交易单位)
也可以模拟TPC-H测试模型(是在线分析处理OLAP的基准程序),主要用来模拟供应商和采购商之间的交易行为,测试结果由TPCH Power来衡量,该值与数据量和交易平均时间有关,表示一个小时内能够完成的复杂交易的数量
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
修改配置文件
- [root@master /usr/local/HammerDB-2.23]
- #pwd
- /usr/local/hammerora-2.6
- [root@master /usr/local/HammerDB-2.23]
- #cat config.xml
- xml version="1.0" encoding="utf-8"?>
- ...
- Oracle<!--rdbms>
- TPC-C<!--bm>
- <!--benchmark>
- <!--oracle>
- 127.0.0.1<!--mysql_host>
- 3306<!--mysql_port>
- <!--connection>
- 128<!--my_count_ware>
- 128<!--mysql_num_threads>
- hammerdb<!--mysql_user>
- hammerdb<!--mysql_pass>
- tpcc<!--mysql_dbase>
- innodb<!--storage_engine>
- false<!--mysql_partition>
- <!--schema>
- 1000000<!--my_total_iterations>
- false<!--my_raiseerror>
- false<!--my_keyandthink>
- standard<!--mysqldriver>
- 2<!--my_rampup>
- 5<!--my_duration>
- false<!--my_allwarehouse>
- false<!--my_timeprofile>
- <!--driver>
- <!--tpcc>
- ...
- <!--mysql>
- ...
- <!--hammerdb>
PS:
mysql_num_threads设置一定不能比my_count_ware仓库数量大,否则后面造数会卡在创建存储过程的地方
生产环境压测,仓库建议不少于100个,仓库数量太少时,并发线程数(虚拟用户数量)增加时,会有大量线程因为操作同一行记录而导致大量锁等待(基本在commit阶段)
生产环境中my_total_iterations中总的迭代查询量不建议不低于500W,这里为了快速演示,保留默认的100W
由于hammerdb是GUI界面的,需要使用securecrt或xshell等终端工具配置X11协议转发,且最好使用终端工具直连安装hammerdb的服务器,否则配置起来非常繁琐
登录待测试的MySQL实例,创建测试账号
- mysql grant all on tpcc.* to hammerdb@'%' identified by 'hammerdb';
- Query OK, 0 rows affected, 1 warning (0.03 sec)
- mysql>
- [root@master /usr/local/HammerDB-2.23]
- #cd /usr/local/HammerDB-2.23/
- [root@master /usr/local/HammerDB-2.23]
- #./hammerdb.tcl
PS:如果在xshell和securecrt终端启动报错,请按照如下链接介绍的方法处理(mac版本的securecrt可能因为部分版本有BUG,无法弹窗,那就用虚拟机吧,虽然xshell可以弹窗,但是确没有mac版本)
注意,配置完成后需要关闭现有终端的连接,并重新连接才会生效

- mysql> show processlist;
- ......
- | 7173 | hammerdb | 10.10.30.14:44066 | tpcc | Query | 1 | update | insert into stock (`s_i_id`, `s_w_id`, `s_quantity`, `s_dist_01`, `s_dist_02`, `s_dist_03`, `s_dist_ |
- | 7174 | hammerdb | 10.10.30.14:44067 | tpcc | Sleep | 1 | | NULL |
- | 7175 | hammerdb | 10.10.30.14:44068 | tpcc | Sleep | 2 | | NULL |
- | 7176 | hammerdb | 10.10.30.14:44069 | tpcc | Sleep | 1 | | NULL |
- | 7177 | hammerdb | 10.10.30.14:44070 | tpcc | Query | 0 | starting | insert into stock (`s_i_id`, `s_w_id`, `s_quantity`, `s_dist_01`, `s_dist_02`, `s_dist_03`, `s_dist_ |
- | 7178 | hammerdb | 10.10.30.14:44071 | tpcc | Sleep | 1 | | NULL |
- +------+----------+-------------------+--------------------+---------+------+-------------------+------------------------------------------------------------------------------------------------------+
- 131 rows in set (0.00 sec)
- mysql> use tpcc
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> show tables;
- +----------------+
- | Tables_in_tpcc |
- +----------------+
- | customer |
- | district |
- | history |
- | item |
- | new_order |
- | order_line |
- | orders |
- | stock |
- | warehouse |
- +----------------+
- 9 rows in set (0.00 sec)
- # 查询表中的数据
- mysql use tpcc
- Database changed
- mysql> select * from warehouse limit 1 \G
- *************************** 1. row ***************************
- w_id: 1
- w_ytd: 3000000.00
- w_tax: 0.1700
- w_name: QDomcHSyn
- w_street_1: hEvTR42ePpREnM
- w_street_2: 0JfWR5A2quAudxrLyA
- w_city: EzRKodmYv0
- w_state: 9l
- w_zip: 966011111
- 1 row in set (0.00 sec)
- # 查询表中的索引
- mysql> show indexes from warehouse \G
- *************************** 1. row ***************************
- Table: warehouse
- Non_unique: 0
- Key_name: PRIMARY
- Seq_in_index: 1
- Column_name: w_id
- Collation: A
- Cardinality: 10
- Sub_part: NULL
- Packed: NULL
- Null:
- Index_type: BTREE
- Comment:
- Index_comment:
- 1 row in set (0.00 sec)
- # 查询存储过程
- mysql> select routine_name from information_schema.routines where routine_schema = 'TPCC';
- +--------------+
- | routine_name |
- +--------------+
- | DELIVERY |
- | NEWORD |
- | OSTAT |
- | PAYMENT |
- | SLEV |
- +--------------+
- 5 rows in set (0.01 sec)
前面2.1小节已经按照tpc-c模型(oltp模型)创建好了测试库tpcc,现在,我们基于tpcc库进行oltp测试
造数完成之后,我们点击"Destroy Virtual Users"按钮停止造数的进程
弹出如下图对话框,这里有两个TPC-C驱动程序脚本,您可以选择标准驱动程序脚本(Standard Driver Script)或定时测试驱动程序脚本(Timed Test Driver Script),此选项选择不同的值会动态修改掉左侧"Driver Script"下的"Load"加载的脚本内容,该脚本是由左侧菜单"Virtual User"配置的虚拟用户运行的脚本,用于执行基准测试。这两种选项加载的不同驱动程序脚本的区别如下:
Standard Driver Script:不定时,用于无法估计测试时长或者想手动选择恰当的时机终止的场景,选择该脚本,在Virtual User Output标签页中或输出日志文件中会打印具体的执行SQL
Timed Test Driver Script:指定测试时长的驱动程序脚本,选择该项可以设置Minutes of Rampup Time和Minutes for Test Duration两个配置项,前者是指定预热时长,后者是指定总的基准测试时长,选择该脚本,在Virtual User Output标签页或输出日志文件中,只有虚拟用户列表,不打印具体的SQL
PS:为了方便演示基准测试曲线,我们这里选择第一种,如下图
然后,创建虚拟用户
要注意:下图中的"Show Output"选项建议勾选,否则基准压测过程中的相关日志输出无法打印(Virtual User Output标签页)
Show Output:勾选之后会打印虚拟用户列表和相关的日志输出到Virtual User Output标签页
Log Output to Temp:勾选之后会创建/tmp/hammerdb.log文件,用于存放压测过程中的日志输出信息
Use Unique Log Name:勾选之后会为每次压测创建一个唯一的日志输出文件,用于存放压测过程中的日志输出信息,例如:/tmp/hammerdb_5A267C6555F903E273734353.log
No Log Buffer:勾选之后不缓冲日志
- mysql show processlist;
- ......
- | 7302 | hammerdb | 10.10.30.14:44195 | tpcc | Query | 0 | closing tables | COMMIT |
- | 7303 | hammerdb | 10.10.30.14:44196 | tpcc | Sleep | 0 | | NULL |
- | 7304 | hammerdb | 10.10.30.14:44197 | tpcc | Query | 0 | query end | INSERT INTO order_line (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, |
- | 7305 | hammerdb | 10.10.30.14:44198 | tpcc | Query | 0 | updating | UPDATE order_line SET ol_delivery_d = timestamp
- WHERE ol_o_id = d_no_o_id AND ol_d_id = d_d_id AND
- o |
- | 7306 | hammerdb | 10.10.30.14:44199 | tpcc | Query | 0 | optimizing | SELECT s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, s_dist_06, s_dist_ |
- | 7307 | hammerdb | 10.10.30.14:44200 | tpcc | Sleep | 0 | | NULL |
- | 7308 | hammerdb | 10.10.30.14:44201 | tpcc | Query | 0 | NULL | COMMIT |
- +------+----------+-------------------+------+---------+------+-------------------+------------------------------------------------------------------------------------------------------+
- 131 rows in set (0.00 sec)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28218939/viewspace-2148813/ ,如需转载,请注明出处,否则将追究法律责任。