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

 

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