tpcc-mysql的業務邏輯及其相關的幾個表作用如下:
New-Order:新訂單,主要對應 new_orders 表
Payment:支付,主要對應 orders、history 表
Order-Status:訂單狀态,主要對應 orders、order_line 表
Delivery:發貨,主要對應 order_line 表
Stock-Level:庫存,主要對應 stock 表
其他相關表:
客戶:主要對應 customer 表
地區:主要對應 district 表
商品:主要對應 item 表
倉庫:主要對應 warehouse 表
二、編譯安裝
編譯非常簡單,隻需要一個 make 即可。
cd /tmp/tpcc-mysql/src
make
如果 make 沒有報錯,就會在 /tmp/tpcc-mysql 下生成 tpcc 二進制指令行工具 tpcc_load 、 tpcc_start
- Build binaries
-
( you should have mysql_config available in $PATH)cd scr ; make
-
- Load data
- create database
mysqladmin create tpcc1000
- create tables
mysql tpcc1000 < create_table.sql
- create indexes and FK ( this step can be done after loading data)
mysql tpcc1000 < add_fkey_idx.sql
- populate data
- simple step
|hostname:port| |dbname| |user| |password| |WAREHOUSES| ref. tpcc_load --help for all optionstpcc_load -h127.0.0.1 -d tpcc1000 -u root -p "" -w 1000
- load data in parallel check load.sh script
- simple step
- create database
- start benchmark
-
./tpcc_start -h127.0.0.1 -P3306 -dtpcc1000 -uroot -w1000 -c32 -r10 -l10800
- |hostname| |port| |dbname| |user| |WAREHOUSES| |CONNECTIONS| |WARMUP TIME| |BENCHMARK TIME|
- ref. tpcc_start --help for all options
-
三、TPCC測試前準備
初始化測試庫環境
cd /tmp/tpcc-mysql
mysqladmin create tpcc1000
mysql -f tpcc1000 < create_table.sql
初始化完畢後,就可以開始加載測試資料了
tpcc_load用法如下:
tpcc_load [server] [DB] [user] [pass] [warehouse]
或者
tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]
選項 warehouse 意為指定測試庫下的倉庫數量。
真實測試場景中,倉庫數一般不建議少于 100個,視伺服器硬體配置而定,如果是配備了SSD或者PCIE SSD這種高IOPS裝置的話,建議最少不低于 1000個。
執行下面的指令,開始灌入測試資料:
cd /tmp/tpcc-mysql
./tpcc_load localhost tpcc1000 tpcc_user "tpcc_password" 1000
在這裡,需要注意的是 tpcc 預設會讀取 /var/lib/mysql/mysql.sock 這個socket 檔案。
是以,如果你的 socket 檔案不在相應路徑的話,可以做個軟連接配接,或者通過TCP/IP的方式連接配接測試伺服器,例如:
cd /tmp/tpcc-mysql
./tpcc_load 1.2.3.4:3306 tpcc1000 tpcc_user "tpcc_password" 1000
加載測試資料時長視倉庫數量而定,若過程比較久需要稍加耐心等待。
四、進行TPCC測試
tpcc_start 工具用于tpcc壓測,其用法如下:
tpcc_start -h server_host -P port -d database_name -u mysql_user \
-p mysql_password -w warehouses -c connections -r warmup_time \
-l running_time -i report_interval -f report_file
幾個選項稍微解釋下
-w 指定倉庫數量
-c 指定并發連接配接數
-r 指定開始測試前進行warmup的時間,進行預熱後,測試效果更好
-l 指定測試持續時間
-i 指定生成報告間隔時長
-f 指定生成的報告檔案名
現在我們來開啟一個測試案例:
tpcc_start -hlocalhost -d tpcc1000 -u tpcc_user -p "tpcc_password" \
-w 1000 -c 32 -r 120 -l 3600 \
-f tpcc_mysql_20140921.log >> tpcc_caseX_20140921.log 2>&1
即:模拟 1000個倉庫規模,并發 16個線程進行測試,熱身時間為 60秒, 壓測時間為 1小時。
真實測試場景中,建議預熱時間不小于 5分鐘,持續壓測時長不小于 30分鐘,否則測試資料可能不具參考意義。
五、TPCC測試結果解讀:
./tpcc_start -h 1.2.3.4 -P 3306 -d tpcc10 -u tpcc -p tpcc \
-w 10 -c 64 -r 30 -l 120 \
-f tpcclog_201409211538_64_THREADS.log >> tpcc_noaid_2_20140921_64.log 2>&1
-- 本輪tpcc壓測的一些基本資訊
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '1.2.3.4' -- 主機
option P with value '3306' -- 端口
option d with value 'tpcc10' -- 資料庫
option u with value 'tpcc' -- 賬号
option p with value 'tpcc' -- 密碼
option w with value '10' -- 倉庫數
option c with value '64' -- 并發線程數
option r with value '30' -- 資料預熱時長
option l with value '120' -- 壓測時長
option f with value 'tpcclog_20140921_64_THREADS.res' -- 輸出報告日志檔案
[server]: 1.2.3.4
[port]: 3306
[DBname]: tpcc10
[user]: tpcc
[pass]: tpcc
[warehouse]: 10
[connection]: 64
[rampup]: 30 (sec.)
[measure]: 120 (sec.)
RAMP-UP TIME.(30 sec.)
-- 預熱結束,開始進行壓測
MEASURING START.
-- 每10秒鐘輸出一次壓測資料
10, 8376(0):2.744|3.211, 8374(0):0.523|1.626, 838(0):0.250|0.305, 837(0):3.241|3.518, 839(0):9.086|10.676
20, 8294(0):2.175|2.327, 8292(0):0.420|0.495, 829(0):0.206|0.243, 827(0):2.489|2.593, 827(0):7.214|7.646
…
110, 8800(0):2.149|2.458, 8792(0):0.424|0.710, 879(0):0.207|0.244, 878(0):2.461|2.556, 878(0):7.042|7.341
120, 8819(0):2.147|2.327, 8820(0):0.424|0.568, 882(0):0.208|0.237, 881(0):2.483|2.561, 883(0):7.025|7.405
-- 以逗号分隔,共6列
-- 第一列,第N次10秒
-- 第二列,總成功執行壓測的次數(總推遲執行壓測的次數):90%事務的響應時間|本輪測試最大響應時間
-- 第三列,新訂單業務成功執行次數(推遲執行次數):90%事務的響應時間|本輪測試最大響應時間
-- 第四列,支付業務的結果,後面幾個的意義同上
-- 第五列,發貨業務的結果,後面幾個的意義同上
-- 第六列,庫存業務的結果,後面幾個的意義同上
-- 壓測結束
STOPPING THREADS................................................................
-- 第一次粗略結果統計
[0] sc:100589 lt:0 rt:0 fl:0 -- New-Order,新訂單業務成功(success,簡寫sc)次數,延遲(late,簡寫lt)次數,重試(retry,簡寫rt)次數,失敗(failure,簡寫fl)次數
[1] sc:100552 lt:0 rt:0 fl:0 -- Payment,支付業務統計,其他同上
[2] sc:10059 lt:0 rt:0 fl:0 -- Order-Status,訂單狀态業務統計,其他同上
[3] sc:10057 lt:0 rt:0 fl:0 -- Delivery,發貨業務統計,其他同上
[4] sc:10058 lt:0 rt:0 fl:0 -- Stock-Level,庫存業務統計,其他同上
in 120 sec.
-- 第二次粗略統計結果,其他同上
[0] sc:100590 lt:0 rt:0 fl:0
[1] sc:100582 lt:0 rt:0 fl:0
[2] sc:10059 lt:0 rt:0 fl:0
[3] sc:10057 lt:0 rt:0 fl:0
[4] sc:10059 lt:0 rt:0 fl:0
(all must be [OK]) -- 下面所有業務邏輯結果都必須為 OK 才行
[transaction percentage]
Payment: 43.47% (>=43.0%) [OK] -- 支付成功次數(上述統計結果中 sc + lt)必須大于43.0%,否則結果為NG,而不是OK
Order-Status: 4.35% (>= 4.0%) [OK] -- 訂單狀态,其他同上
Delivery: 4.35% (>= 4.0%) [OK] -- 發貨,其他同上
Stock-Level: 4.35% (>= 4.0%) [OK] -- 庫存,其他同上
[response time (at least 90% passed)] -- 響應耗時名額必須超過90%通過才行
New-Order: 100.00% [OK] -- 下面幾個響應耗時名額全部 100% 通過
Payment: 100.00% [OK]
Order-Status: 100.00% [OK]
Delivery: 100.00% [OK]
Stock-Level: 100.00% [OK]
50294.500 TpmC -- TpmC結果值