天天看點

tpcc-mysql安裝、使用、結果解讀

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

      
  1. Build binaries
    • cd scr ; make

       ( you should have mysql_config available in $PATH)
  2. 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 

        tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p "" -w 1000

         |hostname:port| |dbname| |user| |password| |WAREHOUSES| ref. tpcc_load --help for all options
      • load data in parallel check load.sh script
  3. 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結果值