如何使用hammerdb進行MySQL基準測試
沃趣科技高階資料庫工程師 羅小波
1、hammerdb安裝與配置
1.1. 什麼是hammerdb
1.2. 安裝
1.3. 配置
1.4. 啟動
2、如何使用hammerdb測試MySQL
2.1. 在GUI視窗進行配置與造數
2.2. 使用hammerdb進行oltp基準測試
3、總結
如何使用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
-
-
參考資料:
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 # 退出互動視窗
- PS:如果安裝了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"?>
- ...
- 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>
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
- 啟動之後介面如下
-
PS:如果在xshell和securecrt終端啟動報錯,請按照如下連結介紹的方法處理(mac版本的securecrt可能因為部分版本有BUG,無法彈窗,那就用虛擬機器吧,雖然xshell可以彈窗,但是確沒有mac版本)
-
注意,配置完成後需要關閉現有終端的連線,並重新連線才會生效
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
-
PS:為了方便演示基準測試曲線,我們這裡選擇第一種,如下圖
-
- 雙擊左側選單"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場景的基準測試,大家有興趣的可以試一試。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2148813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 華納雲:如何使用HammerDB進行MySQL基準測試MySql
- 使用Sysbench對滴滴雲MySQL進行基準測試MySql
- 利用sysbench進行MySQL OLTP基準測試MySql
- MYSQL 效能測試方法 - 基準測試(benchmarking)MySql
- MySQL學習 - 基準測試MySql
- JMeter 如何與 MySQL 進行整合測試JMeterMySql
- 如何使用MOQ進行單元測試
- 公有云RDS-MySQL基準測試MySql
- hadoop基準測試_Hadoop TeraSort基準測試Hadoop
- 【總結】簡述 MySQL 基準測試工具MySql
- [總結] 簡述 MySQL 基準測試工具MySql
- 如何對Mac進行基礎檢測和速度測試Mac
- 基準測試
- 使用 JMH 做 Kotlin 的基準測試Kotlin
- MySQL效能基準測試對比:5.7 VS 8.0MySql
- 如何在Java中做基準測試?JMH使用初體驗Java
- TGI 基準測試
- benchmark 基準測試
- MinkowskiEngine基準測試
- 使用PostMan進行API測試PostmanAPI
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用Loadrunner進行效能測試
- charles 如何進行介面測試?
- Java基準效能測試--JMH使用介紹Java
- 負載測試如何尋找"拐點"?使用哪種方法進行測試?負載
- 使用JUnit進行單元測試
- 使用jest進行單元測試
- 使用 MeterSphere 進行 Dubbo 介面測試
- 使用JMeter進行壓力測試JMeter
- 使用 Sysbench 進行 Linux 效能測試Linux
- 使用Wiremock進行整合測試 - kubilayREMMock
- Postman 如何進行 Websocket 介面測試PostmanWeb
- 開發者測試-採用精準測試工具對Spring Boot應用進行測試Spring Boot
- 介面測試怎麼進行,如何做好介面測試
- 【星雲測試】開發者測試-採用精準測試工具對SpringBoot應用進行測試Spring Boot
- 使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試JMeterRESTAPI
- 使用 locust 對 mysql 語句進行壓測MySql
- 使用Jest進行React單元測試React
- 使用 PostMan 進行自動化測試Postman