TPC-C是專門針對聯機交易處理系統(OLTP系統)的規範,通常狀況下咱們也把這類系統稱爲業務處理系統。tpcc-mysql是percona基於TPC-C(下面簡寫成TPCC)衍生出來的產品,專用於MySQL基準測試。mysql
安裝
經過下載源碼編譯安裝(推薦)
MySQL中文網便捷下載地址:
http://imysql.com/wp-content/uploads/2014/09/tpcc-mysql-src.tgz
[root@server01 pkg]# gunzip tpcc-mysql-src.tgz
[root@server01 pkg]# tar -xf tpcc-mysql-src.tar
[root@server01 pkg]# cd tpcc-mysql
[root@server01 tpcc-mysql]# ls
add_fkey_idx.sql count.sql create_table.sql drop_cons.sql load.sh README schema2 scripts src
[root@server01 tpcc-mysql]# cd src/
[root@server01 src]# ls
delivery.c load.c Makefile ordstat.c payment.c rthist.h sequence.h spt_proc.c support.c trans_if.h
driver.c main.c neword.c parse_port.h rthist.c sequence.c slev.c spt_proc.h tpc.h
[root@server01 src]# make
cc -w -O2 -g -I. `mysql_config --include` -c load.c
cc -w -O2 -g -I. `mysql_config --include` -c support.c
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
若是 make 沒有報錯,就會在 ../tpcc-mysql 下生成 tpcc 二進制命令行工具 tpcc_load 、 tpcc_start
[root@server01 src]# cd ..
[root@server01 tpcc-mysql]# ls
add_fkey_idx.sql count.sql create_table.sql drop_cons.sql load.sh README schema2 scripts src tpcc_load tpcc_start
tpcc_load 提供初始化數據的功能
tpcc_start 進行壓力測試sql
tpcc-mysql的業務邏輯及其相關的幾個表做用以下:
New-Order:新訂單,一次完整的訂單事務,幾乎涉及到所有表
Payment:支付,主要對應 orders、history 表
Order-Status:訂單狀態,主要對應 orders、order_line 表
Delivery:發貨,主要對應 order_line 表
Stock-Level:庫存,主要對應 stock 表
其餘相關表:
客戶:主要對應 customer 表
地區:主要對應 district 表
商品:主要對應 item 表
倉庫:主要對應 warehouse 表 數據庫
TPCC測試前準備
#建立測試數據庫
[root@server01 tpcc-mysql]# mysqladmin -uroot create tpcc1000
#建立測試數據表
[root@server01 tpcc-mysql]# mysql -uroot -f tpcc1000 < create_table.sql
#建立外鍵和索引
[root@server01 tpcc-mysql]# mysql -uroot -f tpcc1000 < add_fkey_idx.sql
初始化完畢後,就能夠開始加載測試數據了socket
開始測試
[root@server01 tpcc-mysql]# ./tpcc_load localhost tpcc1000 root "Aa123456789" 15
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************
<Parameters>
[server]: localhost
[port]: 3306
[DBname]: tpcc1000
[user]: root
[pass]: Aa123456789
[warehouse]: 15工具
2002, HY000, Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
該錯誤是由於默認找的mysql.sock文件路徑不一樣,能夠建立一個軟鏈接
[root@server01 tpcc-mysql]# ln -s /data/mysqldata3306/sock/mysql.sock /var/lib/mysql/mysql.sock
加載過程比較緩慢,須要耐心等待
[root@server01 tpcc-mysql]# ./tpcc_load localhost tpcc1000 root "Aa123456789" 15
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************
<Parameters>
[server]: localhost
[port]: 3306
[DBname]: tpcc1000
[user]: root
[pass]: Aa123456789
[warehouse]: 15
TPCC Data Load Started...
Loading Item
.................................................. 5000
......
.......... 3000
Orders Done.測試
...DATA LOADING COMPLETED SUCCESSFULLY.
加載完成後可進行測試
[root@server01 tpcc-mysql]# ./tpcc_start -hlocalhost -P3306 -d tpcc1000 -u root -p"Aa123456789" -w 15 -c 10 -r 120 -l 120
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value 'localhost'
option P with value '3306'
option d with value 'tpcc1000'
option u with value 'root'
option p with value 'Aa123456789'
option w with value '15'
option c with value '10'
option r with value '120'
option l with value '120'
<Parameters>
[server]: localhost
[port]: 3306
[DBname]: tpcc1000
[user]: root
[pass]: Aa123456789
[warehouse]: 15
[connection]: 10
[rampup]: 120 (sec.)
[measure]: 120 (sec.)this
RAMP-UP TIME.(120 sec.)命令行
MEASURING START.server
10, 15(10):13.769|15.806, 19(0):2.986|5.338, 1(0):1.646|1.951, 1(0):13.931|18.609, 0(0):19.999|45.221
20, 12(10):10.660|10.737, 11(0):2.842|2.873, 2(0):0.577|1.896, 2(0):10.088|12.811, 2(2):19.999|40.274
30, 18(12):10.888|13.278, 16(0):1.416|2.252, 1(0):0.000|0.999, 1(0):0.000|8.792, 1(1):0.000|37.348
40, 13(6):8.680|13.399, 12(0):2.362|4.198, 1(0):0.000|0.593, 1(0):0.000|14.000, 2(2):19.999|45.828
50, 19(11):10.943|11.400, 16(0):2.667|3.177, 3(0):0.488|0.790, 2(0):10.548|11.274, 0(0):0.000|0.000
60, 11(7):8.947|11.514, 15(0):2.810|3.232, 1(0):0.000|0.569, 2(0):11.321|11.724, 3(3):19.999|40.327
70, 16(13):10.152|11.452, 15(0):2.586|2.738, 2(0):0.489|0.746, 1(0):0.000|10.245, 1(1):0.000|40.009
80, 14(9):10.407|11.322, 15(0):2.127|2.458, 1(0):0.000|0.479, 2(0):9.574|11.261, 2(2):19.999|41.798
90, 19(12):9.147|9.379, 21(0):3.113|4.260, 1(0):0.000|0.826, 1(0):0.000|13.315, 2(2):19.999|38.874
100, 13(13):11.407|17.713, 13(0):1.502|1.815, 1(0):0.000|1.018, 2(0):13.091|13.434, 0(0):0.000|0.000
110, 15(12):9.611|11.027, 15(0):2.136|2.491, 2(0):0.311|0.660, 2(0):12.476|12.597, 2(2):19.999|43.571
120, 13(12):9.200|13.701, 14(0):2.347|2.436, 2(0):0.431|0.854, 1(0):0.000|9.053, 2(2):19.999|37.823
-- 以逗號分隔,共6列
-- 第一列,第N次10秒
-- 第二列,新訂單成功執行壓測的次數(推遲執行壓測的次數):90%事務的響應時間|本輪測試最大響應時間,新訂單事務數也被認爲是總有效事務數的指標
-- 第三列,支付業務成功執行次數(推遲執行次數):90%事務的響應時間|本輪測試最大響應時間
-- 第四列,訂單狀態業務的結果,後面幾個的意義同上
-- 第五列,物流發貨業務的結果,後面幾個的意義同上
-- 第六列,庫存倉儲業務的結果,後面幾個的意義同上
STOPPING THREADS..........索引
<Raw Results> -- 第一次統計結果
[0] sc:51 lt:127 rt:0 fl:0 -- New-Order,新訂單業務成功(success,簡寫sc)次數,延遲(late,簡寫lt)次數,重試(retry,簡寫rt)次數,失敗(failure,簡寫fl)次數
[1] sc:182 lt:0 rt:0 fl:0 -- Payment,支付業務統計,其餘同上
[2] sc:18 lt:0 rt:0 fl:0 -- Order-Status,訂單狀態業務統計,其餘同上
[3] sc:18 lt:0 rt:0 fl:0 -- Delivery,發貨業務統計,其餘同上
[4] sc:0 lt:17 rt:0 fl:0 -- Stock-Level,庫存業務統計,其餘同上
in 120 sec.
<Raw Results2(sum ver.)> -- 第二次統計結果
[0] sc:51 lt:127 rt:0 fl:0
[1] sc:182 lt:0 rt:0 fl:0
[2] sc:18 lt:0 rt:0 fl:0
[3] sc:18 lt:0 rt:0 fl:0
[4] sc:0 lt:17 rt:0 fl:0
<Constraint Check> (all must be [OK])
[transaction percentage]
Payment: 44.07% (>=43.0%) [OK] -- 支付成功次數(上述統計結果中 sc + lt)必須大於43.0%,不然結果爲NG,而不是OK
Order-Status: 4.36% (>= 4.0%) [OK] -- 訂單狀態,其餘同上
Delivery: 4.36% (>= 4.0%) [OK] -- 發貨,其餘同上
Stock-Level: 4.12% (>= 4.0%) [OK] -- 庫存,其餘同上
[response time (at least 90% passed)] -- 響應耗時指標必須超過90%經過才行
New-Order: 28.65% [NG] * -- 下面幾個響應耗時指標所有 100% 經過
Payment: 100.00% [OK]
Order-Status: 100.00% [OK]
Delivery: 100.00% [OK]
Stock-Level: 0.00% [NG] *
<TpmC> 89.000 TpmC -- TpmC結果值(每分鐘事務數,該值是第一次統計結果中的新訂單事務數除以總耗時分鐘數)