如何使用HammerDB进行MySQL基准测试

来源:互联网 发布:如何学计算机编程 编辑:程序博客网 时间:2024/06/05 10:16

背 景


服务器配置: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;


1、HammerDB安装与配置



1.1. 什么是hammerdb

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来衡量,该值与数据量和交易平均时间有关,表示一个小时内能够完成的复杂交易的数量。


1.2. 安装


下载hammerdb安装包

wget https://nchc.dl.sourceforge.net/project/hammerora/HammerDB/HammerDB-2.23/HammerDB-2.23-Linux-x86-64-Install


下载文件是一个安装程序,直接执行这个程序进行安装

[root@master /root]

#chmod +x HammerDB-2.23-Linux-x86-64-Install

[root@master /root]

#./HammerDB-2.23-Linux-x86-64-Install

This will install HammerDB on your computer.  Continue? [n/Y] y

Where do you want to install HammerDB? [/usr/local/HammerDB-2.23]

Installing HammerDB...

Installing Program Files...                                                  

Installation complete.  


查看安装目录

[root@master /root]

#cd /usr/local/HammerDB-2.23/

[root@master /usr/local/HammerDB-2.23]

#ll

total 1508

drwx------  2 root    4096 Dec  5 15:51 agent

drwxr-xr-x  2 root    4096 Dec  5 15:51 bin

-rw-r--r--  1 root  25744 Jun 16 19:24 ChangeLog

-rw-r--r--  1 root  13789 Jun  8 01:05 config.xml

-rw-r--r--  1 root    618 Dec 20  2016 COPYRIGHT

-rw-r--r--  1 root  18009 Feb 16  2013 hammerdb.license

-rwxr--r--  1 root    7050 Mar 14  2017 hammerdb.tcl

drwxr-xr-x  2 root    4096 Dec  5 15:51 hdb-components

drwxr-xr-x  2 root    4096 Dec  5 15:51 hdb-modules

drwxr-xr-x  2 root    4096 Dec  5 15:51 include

drwxr-xr-x 21 root    4096 Dec  5 15:51 lib

-rw-r--r--  1 root    883 Mar 14  2017 readme

-rwxr-xr-x  1 root 1433874 Dec  5 15:51 uninstall


1.3. 配置


环境变量

[root@master /usr/local/HammerDB-2.23]

#export MYSQL_HOME=/usr/local/mysql/


[root@master /usr/local/HammerDB-2.23]

#echo 'export MYSQL_HOME=/usr/local/mysql/' >> /etc/profile


[root@master /usr/local/HammerDB-2.23]

#export LD_LIBRARY_PATH=/usr/local/HammerDB-2.23/lib/:$MYSQL_HOME/lib


[root@master /usr/local/HammerDB-2.23]

#echo 'export LD_LIBRARY_PATH=/usr/local/HammerDB-2.23/lib/:$MYSQL_HOME/lib' >> /etc/profile


[root@master /usr/local/HammerDB-2.23]

#export PATH=$MYSQL_HOME/bin:$PATH


[root@master /usr/local/HammerDB-2.23]

#echo 'export PATH=$MYSQL_HOME/bin:$PATH' >> /etc/profile


安装hammerdb GUI依赖包

[root@master /usr/local/HammerDB-2.23]

#yum install libXScrnSaver xorg-x11-fonts* -y


验证环境变量

[root@master /usr/local/HammerDB-2.23]

#cd /usr/local/HammerDB-2.23/


[root@master /usr/local/HammerDB-2.23]

#ll

total 1512

drwxr-xr-x 2 root    4096 Dec  5 09:29 bin

-rw-r--r-- 1 root  13849 Apr  7  2011 ChangeLog

-rw-r--r-- 1 root    4287 Apr  7  2011 config.xml

-rw-r--r-- 1 root    609 Mar 30  2011 COPYRIGHT

-rw-r--r-- 1 root  18009 Mar 14  2007 hammerora.license

-rwxr--r-- 1 root  38983 Mar 30  2011 hammerora.tcl

drwxr-xr-x 2 root    4096 Dec  5 09:29 hora-components

drwxr-xr-x 2 root    4096 Dec  5 09:29 include

drwxr-xr-x 9 root    4096 Dec  5 09:29 lib

-rw-r--r-- 1 root    608 Mar 30  2011 readme

-rwxr-xr-x 1 root 1434065 Dec  5 09:29 uninstall


[root@master /usr/local/HammerDB-2.23]

#./bin/tclsh8.6

% package require mysqltcl  # 检测环境变量

3.05  # 这个地方如果正常输出一个版本号而无报错,说明环境变量配置生效

% exit  # 退出交互窗口


补充:如果安装了sysbench 1.0,则可能报如下错误

[root@master /usr/local/HammerDB-2.23]

#./bin/tclsh8.6

% package require mysqltcl

couldn't load file "/usr/local/HammerDB-2.23/lib/mysqltcl-3.052/libmysqltcl3.052.so": /usr/lib64/libmysqlclient.so.18: version `libmysqlclient_18' not found (required by /usr/local/HammerDB-2.23/lib/mysqltcl-3.052/libmysqltcl3.052.so)


# 此时,我们把sysbench 1.0中percona的那个依赖包软链去掉,就可以了

[root@master /root]

#locate libmysqlclient.so.18

/home/mysql/program/mysql-5.6.34-linux-glibc2.5-x86_64/lib/libmysqlclient.so.18

/home/mysql/program/mysql-5.6.34-linux-glibc2.5-x86_64/lib/libmysqlclient.so.18.1.0

/home/woqu/qdata-dev-env/mysql5.5.25a/lib/libmysqlclient.so.18

/home/woqu/qdata-dev-env/mysql5.5.25a/lib/libmysqlclient.so.18.0.0

/usr/lib64/libmysqlclient.so.18


[root@master /root]

#ll /usr/lib64/libmysqlclient.so.18

lrwxrwxrwx 1 root 22 Nov  1 11:56 /usr/lib64/libmysqlclient.so.18 -> libmysqlclient_r.so.16


[root@master /root]

#unlink /usr/lib64/libmysqlclient.so.18


[root@master /root]

#ln -s /home/mysql/program/mysql-5.6.34-linux-glibc2.5-x86_64/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18


# 如果需要使用sysbench 1.0时,重新换一下软链即可,当然,由于这里我们是使用的MySQL 5.6.x的lib库,两者都可以使用,无需换软链


修改配置文件

所有HammerDB的工作数据都可以在hammerdb界面启动之后,使用菜单选项进行临时设置。 但是,如果你经常需要做某个测试,希望这些配置持久化而不需要每次都去临时设置,那么你可以在HammerDB的工作目录下名为config.xml的配置文件中进行设置,该配置文件将在hammerdb启动时读取。

在这个文件中,您可以通过编辑xml文件来预设模式构建和驱动程序配置,而无需每次都去临时手动更改。 如果你的xml文件格式正确(无格式错误),当你在测试过程中选择对应的菜单选项时,你在xml文件中设置的变量将被应用到HammerDB上,例如(这里我们只看mysql的tpc-c部分):

[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"?>

<hammerdb>

...

<benchmark>

       <rdbms>Oracle</rdbms>

       <bm>TPC-C</bm>

</benchmark>

<oracle>

...

</oracle>

...

<mysql>

   <connection>

       <mysql_host>127.0.0.1</mysql_host>

       <mysql_port>3306</mysql_port>

   </connection>

       <tpcc>

       <schema>

           <my_count_ware>128</my_count_ware>

           <mysql_num_threads>128</mysql_num_threads>

           <mysql_user>hammerdb</mysql_user>

           <mysql_pass>hammerdb</mysql_pass>

           <mysql_dbase>tpcc</mysql_dbase>

           <storage_engine>innodb</storage_engine>

           <mysql_partition>false</mysql_partition>

       </schema>

       <driver>

           <my_total_iterations>1000000</my_total_iterations>

           <my_raiseerror>false</my_raiseerror>

           <my_keyandthink>false</my_keyandthink>

           <mysqldriver>standard</mysqldriver>

           <my_rampup>2</my_rampup>

           <my_duration>5</my_duration>

           <my_allwarehouse>false</my_allwarehouse>

           <my_timeprofile>false</my_timeprofile>

       </driver>

   </tpcc>

...

</mysql>

...

</hammerdb>


补充

  • 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>


1.4. 启动


启动hammerdb

[root@master /usr/local/HammerDB-2.23]

#cd /usr/local/HammerDB-2.23/


[root@master /usr/local/HammerDB-2.23]

#./hammerdb.tcl


启动之后界面如下 


补充:

如果在xshell和securecrt终端启动报错,请按照如下链接介绍的方法处理(mac版本的securecrt可能因为部分版本有BUG,无法弹窗,那就用虚拟机吧,虽然xshell可以弹窗,但是确没有mac版本)

http://www.itshuji.com/technical-article/1764.html

注意,配置完成后需要关闭现有终端的连接,并重新连接才会生效


2、如何使用hammerdb测试MySQL



2.1. 在GUI窗口进行配置与造数

双击左侧MySQL,如下图 


在弹出的窗口中,选择MySQL和TPC-C,如下图 


切换基准测试数据库类型之后,依次展开TPC-C->Schema Build,并双击Options 


在弹出的窗口中,配置好相关的参数(由于之前我们配置过config.xml文件,所以这里已经有填写好的默认值了,这里无需再填写),如下图:


然后点击如下图所示的"build"或者按钮,开始创建基准测试数据库:


然后,可以看到如下输出信息,注意:下面1,2,3,4,5,6…这个输出行的status列不能出现一把红叉的情况,如果有则表示发生了报错,当worker完成后,监视线程会创建索引、存储过程并收集统计信息。虚拟用户1将显示信息“TPCC SCHEMA COMPLETE”字样,其他所有虚拟用户将显示已成功完成其操作的字样,如果没有看到,则说发生了错误。可以在最下方的文本输出框查看报错信息 :


现在,我们使用MySQL命令行客户端登录数据库,可以查看到当前的一些连接进程和数据库表:

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)


造数完成之后,可以看到“TPCC SCHEMA COMPLETE”字样,如下图:


schema创建完成之后,我们可以登录数据库中简单查询以下数据(注意:如果以下三个语句任意一个查询到无结果,说明造数失败,会导致后续load测试无法进行)

# 查询表中的数据

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.2. 使用hammerdb进行oltp基准测试


前面2.1小节已经按照tpc-c模型(oltp模型)创建好了测试库tpcc,现在,我们基于tpcc库进行oltp测试

造数完成之后,我们点击"Destroy Virtual Users"按钮停止造数的进程:


然后左侧列表双击"Driver Script" :


弹出如下图对话框,这里有两个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


补充:

为了方便演示基准测试曲线,我们这里选择第一种,如下图 


双击左侧菜单"Virtual User"下的"Load",载入标准测试驱动程序脚本


然后,创建虚拟用户。

注意:虚拟用户有一个主用户,用于收集其他虚拟用户的统计值和返回状态,主用户包含在你指定的用户数量之内,因此,如果你希望有128个用户(128个并发连接数),那么,你需要创建129个用户,如下图,双击"Virtual User"下的"Options",弹出如下窗口 


要注意:

下图中的"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:勾选之后不缓冲日志 :


然后双击"Virtual User"下的"Create"按钮,创建虚拟用户(准备要并发连接线程,注意此时数据库中并未真正创建连接) :


然后双击左侧"Virtual User"下的"Run",开始执行基准测试 :


此时,登录到数据库中,你可以发现有129个hammerdb用户的线程在运行

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)


此时,我们需要查看tpm的值,可以点击如下图所示的按钮:


然后,可以从如下图所示的窗口中,等待几十秒即可看到数值,再过一会就可以看到曲线图,使用曲线图可以更直观地发现性能抖动问题 :


如果要终止测试和终止tpm统计输出,可以依次点击如下图所示的两个按钮(第一个表示终止基准测试,第二个表示终止tpm统计输出):


3、总 结


我们平时测试MySQL时,大多数时候都是使用的sysbench、tpcc-mysql等基准测试工具,现在,你可以尝试着使用hammerdb来对MySQL做一做基准测试,虽然HammerDB测试工具大多数时候我们听到的都是用于Oracle测试。但却不失为一种选择。另外,前面提到过,HammerDB还支持olap场景的基准测试,大家有兴趣的可以试一试。


参考资料:

http://www.hammerdb.com/hammerdb_mysql_oltp.pdf

http://www.hammerdb.com/hammerdb_quickstart_mysql.pdf

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 九牧洁具卫浴 九牧卫浴柜 九牧旗舰店 九牧卫浴洁具 jmwy jomoo九牧卫浴 天然气软管 九牧马桶价格 雷诺配件 威尔钢 九牧卫浴价格 气动开关 九牧洁具怎么样 九牧卫浴价格表 九牧卫浴马桶 九沐卫浴 九牧卫浴好吗 配件网 九牧卫浴电话 都龙卫浴 马桶配件 九牧卫浴怎么样 九牧卫浴 坐便器配件 气阀开关 九牧卫浴图片 干手器 淋浴房配件 九牧卫浴浴室柜图片 九牧卫浴洗脸盆柜价格表 海尔洗衣机配件 九牧和箭牌卫浴哪个好 九牧马桶好吗 九牧马桶11129 九牧水龙头多少钱 九牧水龙头旗舰店 马桶九牧 九牧马桶1183怎么样 九牧智能马桶怎么样 九牧水槽价格 九牧马桶图片