星期五, 11月 23, 2012

用 tpcc-mysql 測試 MySQL InnoDB 效能

因為跟廠商借了張 NMR8100-4i 要測試效能,而這張有兩個 50GB 的 SLC NAND Flash,想要跑看看如果拿來給 database 用的效能如何。

TPC-C 是用來模擬線上交易服務所產生的資料庫 query 藉以測試效能 (另外還有 TPC-ETPC-H 是測試不同面向)。而 tpcc-mysql 則是 Percona 維護的 open source 專案,專門拿來測試 MySQL 的效能,面向則是跟 TPC-C 接近。

所以就決定拿 tpcc-mysql 來當測試工具 (因為 Percona 的關係)。

建議第一次玩的人可以在 AWS EC2 上開一台 Ubuntu server 玩看看,反正爛掉可以重來,不用太擔心要還原...

首先先安裝 bzrbuild-essential 以及 libmysqlclient-dev,然後將 source code checkout 下來:
# apt-get install bzr build-essential libmysqlclient-dev# cd /tmp# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
checkout 後要先上這個 bug report 裡面提供的 patch,雖然標題是 9.04 64bits,但在 12.04 64bits 下還是沒修正:「tpcc_start core dump on Ubuntu 9.04 64bit」。

修正完成後直接編就可以了:
# cd src# make
接下來的東西可以看 README 裡的說明。

首先先建立 database (我取 tpcc1000),然後再把 create_table.sqladd_fkey_idx.sql 倒進去。

然後用 tpcc_load 產生資料塞進資料庫:
# ./tpcc_load 127.0.0.1:3306 tpcc1000 root rootpassword 1000
上面這是單一 process 在塞,可以考慮用 load.sh 同步塞 (速度快很多,不過 script 寫死用 root 塞,密碼是空的,你可以自己改裡面的內容):
# ./load.sh tpcc1000 1000
我自己測試發現 W=100 約 10GB 資料,W=1000 約 86GB 資料。測試的時候要注意有沒有超過 memory size。通常是 fit memory 測一次,over memory 再測一次。我的例子是測 fit flash size 一次,over flash size 一次。

第一次倒測試資料進去的時候,我通常會先調整 my.cnf,讓他不要每次 flush to disk,這樣寫入速度會快很多。

雖然說快很多,W=1000 的情況下我也跑了八個小時 I/O bound 才產生出 86GB 資料。

倒完資料後要把 my.cnf 改成要測試的設定,然後重跑 mysqld,接著跑 tpcc_start 實際測試:
# ./tpcc_start -h127.0.0.1 -P3306 -dtpcc1000 -uroot -prootpassword -w1000 -c32 -r 60 -l3600
上面的 -c 是 thread 數量,-r 是 warmup 時間,-l 則是測試的時間。這個例子裡會 warmup 60 秒,再加上 3600 秒的測試 (一小時)。

最後他會給你 TpmC 數字,這數字愈大表示效能愈好。

大致上就是這樣,話說回來,NMR8100-4i 這張卡帶來的效能不錯耶...

沒有留言: