sysbench 是模組化、跨平台、多執行緒的基準測試工具,支援 CPU、磁碟 IO、記憶體、執行緒、資料庫(OLTP)等測試模式。本文詳述從源碼編譯到 OLTP 壓測全流程與結果解讀。
一、源碼下載與編譯安裝
# 安裝 bzr 客戶端 (EPEL)
rpm -Uvh https://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum install bzr
# 下載源碼
cd /tmp
bzr branch lp:sysbench
# 或直接下載打包版:https://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz
# 編譯
cd sysbench-0.4.12-1.1
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
make
# 生成二進位:sysbench/
二、OLTP 測試前準備
mysqladmin create sbtest
./sysbench --mysql-host=1.2.3.4 --mysql-port=3317 --mysql-user=tpcc --mysql-password=tpcc \
--test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --rand-init=on prepare
--oltp_tables_count=10:10 張測試表。
--oltp-table-size=100000:每表 10 萬行。
--rand-init=on:隨機填充資料。
- 實戰建議:表數 ≥ 10,單表 ≥ 500 萬行;SSD/PCIe SSD 環境建議單表 ≥ 1 億行。
三、執行 OLTP 壓測
./sysbench --mysql-host=1.2.3.4 --mysql-port=3306 --mysql-user=tpcc --mysql-password=tpcc \
--test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=10000000 \
--num-threads=8 --oltp-read-only=off --report-interval=10 --rand-type=uniform \
--max-time=3600 --max-requests=0 --percentile=99 run >> ./log/sysbench_oltpX_8_20140921.log
關鍵參數解析
| 參數 | 含義 |
--num-threads=8 | 8 條並發連線 |
--oltp-read-only=off | 讀寫混合模式(預設開啟唯讀) |
--report-interval=10 | 每 10 秒輸出中間報告 |
--rand-type=uniform | 隨機分佈:uniform/gaussian/special/pareto |
--max-time=3600 | 最大執行 3600 秒(1 小時) |
--max-requests=0 | 不限總請求數(由 max-time 控制) |
--percentile=99 | 99 分位數響應時間(丟棄 1% 長尾) |
四、測試結果解讀範例
[ 10s] threads: 8, tps: 1111.51, reads/s: 15568.42, writes/s: 4446.13, response time: 9.95ms (99%)
[ 20s] threads: 8, tps: 1121.90, reads/s: 15709.62, writes/s: 4487.80, response time: 9.78ms (99%)
...
OLTP test statistics:
queries performed:
read: 938224
write: 268064
other: 134032
total: 1340320
transactions: 67016 (1116.83 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 1206288 (20103.01 per sec.)
other operations: 134032 (2233.67 per sec.)
General statistics:
total time: 60.0053s
total number of events: 67016
total time taken by event execution: 479.8171s
response time:
min: 4.27ms
avg: 7.16ms
max: 13.80ms
approx. 99 percentile: 9.88ms
Threads fairness:
events (avg/stddev): 8377.0000/44.33
execution time (avg/stddev): 59.9771/0.00
核心指標關注點
- TPS:每秒事務數,核心吞吐指標。
- 99% 响應時間:忽略極端長尾,反映大多數請求體驗。
- Deadlocks:死鎖數,應為 0 或極低。
- Read/Write 比例:驗證負載模式符合預期。
- Threads fairness:各執行緒負載均衡度,stddev 越小越好。
五、最佳實務建議
- 持續壓測 ≥ 30 分鐘,預熱穩定後數據才具參考性。
- 多組
--num-threads(如 16, 32, 64, 128)測試擴展性拐點。
- 對比不同
--rand-type 模擬不同業務存取模式。
- 記錄硬體配置、MySQL 參數(
innodb_buffer_pool_size、innodb_flush_log_at_trx_commit 等)以便複現。
- 配合
iostat、mpstat、perf 系統級指標關聯分析瓶頸。
- 結果輸出 CSV/JSON 便於自動化圖表化與 CI 整合。
sysbench 是 MySQL 效能基線建立、版本升級驗證、硬體選型的標準工具,掌握其用法是 DBA 必備技能。
- 上一篇文章: 提升 MySQL InnoDB BLOB/TEXT 列存儲效率:Off-page 機制解析與五大優化策略
- 下一篇文章: MySQL 中 NOT IN 與 MINUS 查詢優化實戰
Copyright ©
程式碼之家 All Rights Reserved