今天拿 MySQL benchmark tool – Sysbench 來測試看看 Percona XtraDB Server + Haproxy 效能如何,實驗主機是執行在 CentOS 6.4 版本,記憶體 128 G,在 CentOS 本身用 Yum 安裝 Sysbench 時,內建的版本為 0.4.12,單機測試 MySQL 效能不會出現任何錯誤,但是只要是透過 Haproxy,並且有兩台以上的 Server,就會噴出底下錯誤訊息:
ALERT: failed to execute mysql_stmt_execute(): Err1317 Query execution was interrupted
碰到這問題,在網路上找到一篇 sysbench duplicate entries,裡面提到請使用 Sysbench 0.5.0 版本就不會噴出此錯誤,直接看 sysbench 0.5 for CentOS 6 這篇,裡面有 CentOS 64 打包好的 rpm package,下載後透過 rpm 指令安裝即可
$ rpm -ivh sysbench-0.5-3.el6_.x86_64.rpm
安裝完成,實際底下測試看看
建立測試用資料庫
請先建立 sbtest
資料庫
mysql> create database sbtest;
產生測試用資料
$ sysbench --test=oltp --db-driver=mysql --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3307 --mysql-user=xxxx --mysql-password=xxxxx --oltp-auto-inc=off --test=/usr/share/doc/sysbench/tests/db/oltp.lua --oltp-table-size=1000000 prepare
請注意 mysql-port
請務必填寫 Haproxy port,--oltp-table-size
用來產生多少筆資料,先產生 100 萬筆資料,大小大概是 270 MB
開始測試
$ sysbench --test=oltp --db-driver=mysql --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3307 --mysql-user=xxxx --mysql-password=xxxxx --oltp-auto-inc=off --test=/usr/share/doc/sysbench/tests/db/oltp.lua --oltp-table-size=100000 --num-threads=100 run
差別在於最後執行的步驟 run
,上一個步驟則是 prepare
看結果
會跑出底下的數據給您參考
OLTP test statistics: queries performed: read: 172102 write: 48943 other: 22293 total: 243338 transactions: 10000 (46.37 per sec.) deadlocks: 2293 (10.63 per sec.) read/write requests: 221045 (1025.00 per sec.) other operations: 22293 (103.37 per sec.) General statistics: total time: 215.6540s total number of events: 10000 total time taken by event execution: 21427.5778s response time: min: 53.45ms avg: 2142.76ms max: 22097.26ms approx. 95 percentile: 5689.02ms Threads fairness: events (avg/stddev): 100.0000/43.42 execution time (avg/stddev): 214.2758/0.75
清除測試資料
$ sysbench --test=oltp --db-driver=mysql --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3307 --mysql-user=xxx --mysql-password=xxx --oltp-auto-inc=off --test=/usr/share/doc/sysbench/tests/db/oltp.lua --oltp-table-size=1000000 cleanup
請直接下 cleanup
即可
參考資料: MySQL benchmark tool – sysbench