使用tpcc mysql進行基準測試
獲取並編譯tpcc mysql
獲取tpcc mysql 源碼
sudo apt-get install bzr bzr branch lp:~percona-dev/perconatools/tpcc-mysql
編譯tpcc mysql
- 在編譯之前,你應該確認mysql_config在你的PATH變量中。
cd src make
編譯完成後,會在上一層目錄看到兩個可執行文件tpcc_load和tpcc_start。
導入測試數據
- 新建數據庫
mysqladmin -uroot -p*** create scutech-tpcc
- 新建表
mysql -uroot -p*** scutech-tpcc < create_table.sql
- 新建索引和FK
mysql -uroot -p*** scutech-tpcc < add_fkey_idx.sql
- 導入數據
./tpcc_load 127.0.0.1:3306 scutech-tpcc root password 10
- 127.0.0.1:3306 : 指定mysql的IP和端口號
- scutech-tpcc : 指定數據庫的名字
- root : 用戶名
- password : 密碼
- 10 : 倉庫數(可根據需要來設置倉庫數的大小,總結網上資料所說,設置40-100個是對CPU的測試,400-1000個是對IO的測試)
- 導入的時間可能會比較長,10個倉庫剛導入進去的大小約爲1G,所以應該根據實際情況來設置倉庫的大小。
開始測試
執行下面的命令,就會開始測試,並把結果打印到屏幕上。如果需要分析結果,應該把輸出結果重定向到一個文件中。
./tpcc_start -h127.0.0.1 -P3306 -dscutech-tpcc -uroot -ppassword -w10 -c2 -r120 -l600
- -h:指定mysql的IP
- -P:指定mysql的端口號
- -d:指定數據庫的名字,應該和上面創建的保持一致
- -u:mysql用戶名
- -p:mysql 用戶的密碼
- -w:指定倉庫數
- -c:指定併發連接數。
- -r:指定預熱的時間,目的是把數據緩存到內存中
- -l:指的測試時間,以10秒爲間隔輸出事務的吞吐量
結果分析
輸出的結果如下:
*************************************** *** ###easy### TPC-C Load Generator *** *************************************** option h with value '127.0.0.1' option P with value '3306' option d with value 'tpcc_scutech' option u with value 'root' option p with value 'dingjia' option w with value '10' option c with value '2' option r with value '120' option l with value '600' <Parameters> [server]: 127.0.0.1 [port]: 3306 [DBname]: tpcc_scutech [user]: root [pass]: dingjia [warehouse]: 10 [connection]: 2 [rampup]: 120 (sec.) [measure]: 600 (sec.) RAMP-UP TIME.(120 sec.) MEASURING START. 10, 2286(0):1.373|1.590, 2283(0):0.279|0.398, 228(0):0.148|0.208, 229(0):1.604|1.863, 228(0):4.438|4.993 20, 2315(0):1.351|1.469, 2314(0):0.273|0.317, 231(0):0.145|0.152, 231(0):1.507|1.537, 233(0):4.351|4.362 …… …… 580, 1102(0):1.373|1.498, 1100(0):0.300|0.371, 110(0):0.155|0.169, 109(0):1.602|1.837, 110(0):4.356|4.592 590, 1654(0):1.355|1.460, 1656(0):0.294|0.388, 165(0):0.181|0.184, 166(0):1.660|1.723, 165(0):4.354|4.433 600, 1862(0):1.345|1.555, 1859(0):0.289|0.410, 187(0):0.138|0.166, 186(0):1.528|1.755, 186(0):4.365|4.608 STOPPING THREADS.. <Raw Results> [0] sc:131981 lt:0 rt:0 fl:0 [1] sc:131977 lt:0 rt:0 fl:0 [2] sc:13198 lt:0 rt:0 fl:0 [3] sc:13198 lt:0 rt:0 fl:0 [4] sc:13198 lt:0 rt:0 fl:0 in 600 sec. <Raw Results2(sum ver.)> [0] sc:131981 lt:0 rt:0 fl:0 [1] sc:131977 lt:0 rt:0 fl:0 [2] sc:13198 lt:0 rt:0 fl:0 [3] sc:13198 lt:0 rt:0 fl:0 [4] sc:13198 lt:0 rt:0 fl:0 <Constraint Check> (all must be [OK]) [transaction percentage] Payment: 43.48% (>=43.0%) [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)] New-Order: 100.00% [OK] Payment: 100.00% [OK] Order-Status: 100.00% [OK] Delivery: 100.00% [OK] Stock-Level: 100.00% [OK] <TpmC> 13198.100 TpmC
- 業務邏輯
tpcc包括了4個業務邏輯:- New-Order:新訂單
- Order-Status:支付
- Delivery:發貨
- Stock-Level:庫存
- late的定義
根據不同的業務,late的定義也不同,4種業務邏輯分別對操作延遲定義的界限值如下所示:- Payment 5ms
- Order-Status 5ms
- Delivery 80ms
- Stock-Level 20ms
- 數據意義
10, 2286(0):1.373|1.590, 2283(0):0.279|0.398, 228(0):0.148|0.208, 229(0):1.604|1.863, 228(0):4.438|4.993
二到六列數值組成格式是: 成功執行的次數(推遲執行的次數):90%事務的相應時間|最大相應時間
這一行有6列數據,意思分別是- 第一列:因爲是10秒輸出一句,所以這裏代表的數據是0-10秒之間的結果。
- 第二列:這一列是總的結果
- 第三列:新訂單業務的結果
- 第四列:支付業務的結果
- 第五列:發貨業務的結果
- 第六列:庫存業務的結果
這裏我們主要關注總的結果就行了。
- TmpC的意義
tpmC是代表每分鐘事務處理的數量。
提取結果文件中的數據
- 如果在執行測試的時候,把輸出的數據重定向到一個文件當中,則可以利用下面的腳本去把時間和總的事務數提取出來。
#!/bin/bash #filename tpcc-output-analyze.sh TIMESLOT=1 if [ -n "$2" ];then TIMESLOT=$2 echo “Defined $2″ fi cat $1 | grep -v HY000 | grep -v payment | grep -v neword | awk -v timeslot=$TIMESLOT ' BEGIN { FS="[,():]"; s=0; cntr=0; aggr=0 } /MEASURING START/ { s=1} /STOPPING THREADS/ {s=0} /0/ { if (s==1) { cntr++; aggr+=$2; } if ( cntr==timeslot ) { printf ("%d %3d\n",$1,(aggr/'$TIMESLOT')) ; cntr=0; aggr=0 } } '
- 用法也很簡單:
./tpcc-output-analyze.sh Log_file_name