MySQL壓測軟體tpcc-mysql
- 安裝
直接在GitHub下載
wget https://github.com/Percona-Lab/tpcc-mysql/archive/faa06df608d8bd36d540b0fc0042fd33debbde0c.zip
或是用bazaar來下載
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/bzr-2.5.1-14.el7.x86_64.rpm因為我是用tar檔安裝MySQL的,所以它在編譯過程一直會找不到相關的library
rpm install bzr-2.5.1-14.el7.x86_64.rpm
# cd src/
# make
[root@mysql-course src]# make爬了文說直接設定:
cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load
/usr/bin/ld: cannot find -lperconaserverclient
collect2: error: ld returned 1 exit status
make: *** [../tpcc_load] Error 1
export LD_LIBRARY_PATH=/opt/percona57/lib就可以解決,但我試了就是沒辦法,於是查了一下mysql_config裡的設定
export C_INCLUDE_PATH=/opt/percona57/include/
export MYSQL_HOME=/opt/percona57
export PATH=$MYSQL_HOME/bin:$PATH
[root@mysql-course src]# mysql_config不曉得為什麼它自己會帶到/opt/percona57/lib/mysql這層,但libperconaserverclient的library在/opt/percona57/lib裡面,我試著指定路徑給它,就是無法生效,最後只好做軟連結給它:
--libs [-L/opt/percona57/lib/mysql -lperconaserverclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl]
--libs_r [-L/opt/percona57/lib/mysql -lperconaserverclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl]
[root@mysql-course src]# ln -s /opt/percona57/lib/libperconaserverclient.so.20 /opt/percona57/lib/mysql/這個錯誤就解了,但編譯時又出現另一個錯誤:
[root@mysql-course src]# ln -s /opt/percona57/lib/libperconaserverclient.so /opt/percona57/lib/mysql/
[root@mysql-course src]# ln -s /opt/percona57/lib/libperconaserverclient.so.20.3.0 /opt/percona57/lib/mysql/
[root@mysql-course src]# make這個錯誤比較簡單,就安裝openssl-devel套件就可以了
cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load
/usr/bin/ld: cannot find -lz
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
make: *** [../tpcc_load] Error 1
[root@mysql-course src]# yum -y install openssl-devel安裝完後再執行編譯一次,就成功了!!
[root@mysql-course src]# make
cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load
cc -w -O2 -g -I. `mysql_config --include` -c main.c
cc -w -O2 -g -I. `mysql_config --include` -c spt_proc.c
cc -w -O2 -g -I. `mysql_config --include` -c driver.c
cc -w -O2 -g -I. `mysql_config --include` -c sequence.c
cc -w -O2 -g -I. `mysql_config --include` -c rthist.c
cc -w -O2 -g -I. `mysql_config --include` -c neword.c
cc -w -O2 -g -I. `mysql_config --include` -c payment.c
cc -w -O2 -g -I. `mysql_config --include` -c ordstat.c
cc -w -O2 -g -I. `mysql_config --include` -c delivery.c
cc -w -O2 -g -I. `mysql_config --include` -c slev.c
cc main.o spt_proc.o driver.o support.o sequence.o rthist.o neword.o payment.o ordstat.o delivery.o slev.o `mysql_config --libs_r` -lrt -o ../tpcc_start
成功後,在tpcc-mysql目錄下面就可以看到2個可執行檔tpcc_load、tpcc_start
[root@mysql-course tpcc-mysql]# ls -al
total 284
drwxr-xr-x 6 root root 4096 Sep 5 12:17 .
drwxr-xr-x. 8 root root 4096 Sep 5 14:14 ..
drwxr-xr-x 5 root root 4096 Sep 5 11:52 scripts
drwxr-xr-x 2 root root 4096 Sep 5 12:17 src
-rwxr-xr-x 1 root root 72757 Sep 5 12:17 tpcc_load
-rwxr-xr-x 1 root root 175448 Sep 5 12:17 tpcc_start
- 準備測試資料庫
[root@mysql-course tpcc-mysql]# mysqladmin create tpcc_test
[root@mysql-course tpcc-mysql]# mysql tpcc_test < create_table.sql
[root@mysql-course tpcc-mysql]# mysql tpcc_test;
"root@localhost [tpcc_test]>show tables;
+---------------------+
| Tables_in_tpcc_test |
+---------------------+
| customer |
| district |
| history |
| item |
| new_orders |
| order_line |
| orders |
| stock |
| warehouse |
+---------------------+
9 rows in set (0.00 sec)
- 載入測試資料
[root@mysql-course tpcc-mysql]# ./tpcc_load --help
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************
usage:
tpcc_load [server] [DB] [user] [pass] [warehouse]
OR
tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]
範例:
./tpcc_load localhost tpcc_test root "" 10
[warehouse]:指會在warehouse表中建立多少個倉庫,本範例會建10個
- 執行壓測
root@mysql-course tpcc-mysql]# ./tpcc_start -h localhost -P3306 -d tpcc_test -w 10 -c 10 -r 120 -l 3600 -f tpcc_result.txt-- 資料預熱開始
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value 'localhost' -- 主機名稱
option P with value '3306' -- 埠號
option d with value 'tpcc_test' -- 資料庫名稱
option w with value '10' -- 倉庫數量
option c with value '10' -- 並發連線數
option r with value '120' -- 資料預熱時間
option l with value '3600' -- 壓測時間
option f with value 'tpcc_result.txt' -- 輸出報告
[server]: localhost
[port]: 3306
[DBname]: tpcc_test
[user]:
[pass]:
[warehouse]: 10
[connection]: 10
[rampup]: 120 (sec.)
[measure]: 3600 (sec.)
RAMP-UP TIME.(120 sec.)
-- 資料預熱結束,壓測開始
MEASURING START.
-- 每10秒輸出一次壓測資訊
10, 51(15):17.032|27.762, 50(0):3.259|7.118, 5(0):1.522|1.707, 4(0):9.673|11.572, 6(6):19.999|69.886
20, 46(19):15.747|15.831, 45(0):3.104|3.181, 5(0):0.141|0.736, 5(0):4.869|5.092, 4(4):19.999|65.515
...
3590, 39(13):13.299|35.853, 42(0):3.035|3.038, 4(0):0.265|0.953, 4(0):4.515|7.538, 4(1):14.792|39.850
3600, 48(17):13.964|14.129, 47(0):3.131|3.267, 4(0):0.728|0.901, 5(0):5.391|8.173, 4(3):19.999|39.125
以逗號分隔,共6欄資訊
第一欄,每10秒為單位的第N次執行
第二欄,新訂單成功執行壓測的次數(推遲執行壓測的次數):90%交易的回應時間|本次測試最大回應時間
(新訂單交易也被認為是總有效交易數的指標)
第三欄,支付業務成功執行次數(推遲執行次數):90%交交易的回應時間|本次測試最大回應時間
第四欄,訂單狀態業務的結果,後面說明同上
第五欄,物流發貨業務的結果,後面說明同上
第六欄,庫存倉儲業務的結果,後面說明同上
-- 壓測結束
STOPPING THREADS..........
-- 第一次統計結果
[0] sc:10394 lt:5539 rt:0 fl:0 -- New-Order,新訂單業務成功次數,延遲次數,重試次數,失敗次數
[1] sc:15801 lt:103 rt:0 fl:0 -- Payment,支付業務統計
[2] sc:1588 lt:5 rt:0 fl:0 -- Order-Status,訂單狀態業務統計
[3] sc:1593 lt:0 rt:0 fl:0 -- Delivery,物流發貨業務統計
[4] sc:159 lt:1433 rt:0 fl:0 -- Stock-Level,庫存倉儲業務統計
in 3600 sec. -- 總耗時秒
-- 第二次統計結果
[0] sc:10394 lt:5539 rt:0 fl:0
[1] sc:15830 lt:103 rt:0 fl:0
[2] sc:1588 lt:5 rt:0 fl:0
[3] sc:1593 lt:0 rt:0 fl:0
[4] sc:160 lt:1433 rt:0 fl:0
[transaction percentage]
Payment: 43.44% (>=43.0%) [OK] -- 支付成功次數(上述統計結果中sc+lt > 43%才為OK,否則為NG)
Order-Status: 4.35% (>= 4.0%) [OK] -- 訂單狀態(上述統計結果中sc+lt >4%才為 OK,否則為NG)
Delivery: 4.35% (>= 4.0%) [OK] -- 發貨統計
Stock-Level: 4.35% (>= 4.0%) [OK] -- 庫存統計
[response time (at least 90% passed)] -- 回應耗時指標必須超過90%通過才行
New-Order: 65.24% [NG] * -- 新訂單回應時間未通過
Payment: 99.35% [OK] -- 支付回應時間通過
Order-Status: 99.69% [OK] -- 訂單狀態回應時間通過
Delivery: 100.00% [OK] -- 發貨回應時間通過
Stock-Level: 9.99% [NG] * -- 庫存回應時間未通過
265.550 TpmC -- Tpmc結果值,即每分鐘的交易數
-- Tpm(Transaction per minute)表示每分鐘已執行的交易總量,而C表示基準測試
-- (每分鐘交易數,該值是由"第一次統計結果"中的新訂單交易數/總耗時分鐘數(包含延遲時間/總耗時分鐘數),以本例:(10394/60)+(5539/60)=265.550
參考資料
http://imysql.com/2014/10/10/tpcc-mysql-full-user-manual.shtml
http://wing324.github.io/2015/09/28/TPCC-MySQL%E5%B7%A5%E5%85%B7/
http://caduke.blog.51cto.com/3365689/1657450
留言
張貼留言