測試TPC本來是個嚴肅的事情,這裡只是為了娛樂一下。不要和TPC委員會的高端報告混為一談就好了。
1. 先去找個不那麼標準的TPC-C測試載入器
似乎Percona MySQL的這個東西用得人還比較多:http://bazaar.launchpad.net/~percona-dev/perconatools/tpcc-mysql/簡單的看了一下實現,這個和標準的差距還是較大的,例如事務之間沒有停頓,也就是沒有所謂的thinking time,測出來的tpmC的值會虛高。
不管是TPC,還是SPECfs,測試的基本步驟是通用的。大概都會有:a) 準備環境b) 載入資料c) 開跑d) 產生報告
當然了,跑一次不容易,為了分析遇到的問題,開跑的過程中應該記錄一些資料,例如CPU、記憶體、網路、IO等統計資料。
2. 熟悉一下工具
原始碼目錄下的README什麼的是一定要看的,並且要仔細看。閑的蛋疼的話,還可以看看那些代碼。
既然是測試TPC-C,必定有些建表的語句,這個需要仔細看看。例如:
create_table.sqladd_fkey_idx.sql
表上至少應該有標準規定的那些個主碼,外碼等約束。不帶約束的測試就是耍流氓。
3. 在正式開測之前,需要類比練手一下,把該犯的錯誤都犯一遍。
編譯測試程式$ cd src; make;
建立資料庫個,假設庫名叫做tpcc好了$ mysqladmin --no-defaults -S /home/mysql/run/mysql.sock -u root create tpcc
建表$ mysql --no-defaults -S /home/mysql/run/mysql.sock -u root tpcc < create_table.sql
載入資料,假設載入10個倉庫好了$ ./tpcc_load 127.0.0.1:3306 tpcc root "" 10
機器要是差點,一個小時都搞不定。抽根煙肯定是不夠的,出去吃個飯吧。既然這麼慢,一定有比這快點的辦法。例如:採用並行載入模式:$ ./load.sh tpcc 10
追加外碼約束$ mysql --no-defaults -S /home/mysql/run/mysql.sock -u root tpcc < add_fkey_idx.sql
前面說過,不加約束的測試是……在資料載入完畢後再執行有助於減少資料載入時間。再去抽顆煙吧。
跑測試$ ./tpcc_start -h 127.0.0.1 -P 3306 -d tpcc -u root -w 10 -c 5 -r 5 -l 3005個串連,預熱5秒,跑300秒,也就是5分鐘。一看就是娛樂版,這個跑不出什麼好指標,例如:a) 資料量太少b) 串連數太少c) 才跑了幾百秒……
清理環境(刪除資料庫)$ mysqladmin --no-defaults -S /home/mysql/run/mysql.sock -u root drop tpcc
跑完後會列印出個報告,最後一行類似於:
<TpmC>
10.200 TpmC
好可憐啊!