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
rpm install bzr-2.5.1-14.el7.x86_64.rpm
# cd src/
# make
因為我是用tar檔安裝MySQL的,所以它在編譯過程一直會找不到相關的library

 [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
export C_INCLUDE_PATH=/opt/percona57/include/
export MYSQL_HOME=/opt/percona57
export PATH=$MYSQL_HOME/bin:$PATH
就可以解決,但我試了就是沒辦法,於是查了一下mysql_config裡的設定
[root@mysql-course src]# mysql_config
--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]
不曉得為什麼它自己會帶到/opt/percona57/lib/mysql這層,但libperconaserverclient的library在/opt/percona57/lib裡面,我試著指定路徑給它,就是無法生效,最後只好做軟連結給它:
[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
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
這個錯誤比較簡單,就安裝openssl-devel套件就可以了
[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

(all must be [OK])  -- 下面所有業務邏輯結果都必須為OK才行
 [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

留言

這個網誌中的熱門文章

【工作筆記】SQL Timeout追蹤

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明