sysbench 是模組化、跨平台、多線程的基準測試工具,支援 CPU、記憶體、檔案 IO、執行緒、Mutex 及資料庫 OLTP 測試。本文以 0.4.12 版為例,詳述安裝、通用參數、各測試模組實戰與報告解讀。
# 1. 安裝相依套件 yum install libtool -y # 2. 設定編譯選項(指定 MySQL 路徑) ./configure --prefix=/usr/local/sysbench-0.4.12 \ --with-mysql-includes=/usr/local/mysql/include \ --with-mysql-libs=/usr/local/mysql/lib # 3. 編譯安裝 make && make install # 4. 複製測試腳本與建立軟連結 cp -r sysbench/tests /usr/local/sysbench-0.4.12 ln -s /usr/local/sysbench-0.4.12/bin/sysbench /usr/local/bin/sysbench # 5. 設定動態庫路徑 echo 'export LD_LIBRARY_PATH=/usr/local/mysql/lib' >> /etc/profile source /etc/profile
若無 configure 腳本,先執行
chmod +x autogen.sh && ./autogen.sh。支援 Oracle/PostgreSQL 需加--with-oracle或--with-pgsql。
sysbench [通用選項] --test=測試模組 [模組選項] 命令 命令: prepare | run | cleanup | help
| 參數 | 說明 | 預設 |
|---|---|---|
| --num-threads=N | 執行緒數 | 1 |
| --max-requests=N | 最大請求總數 | 10000 |
| --max-time=N | 最大執行秒數(0=不限) | 0 |
| --report-interval=N | 定期輸出中間統計秒數 | 0(關閉) |
| --percentile=N | 回應時間百分位數 | 95 |
| --debug=on | 顯示詳細除錯資訊 | off |
sysbench --num-threads=12 --max-requests=10000 --test=cpu --cpu-max-prime=20000 run
12 線程各執行質數運算至 20000,測量總時間與每秒事件數。
sysbench --num-threads=12 --max-requests=10000 --test=threads --thread-yields=100 --thread-locks=2 run
模擬高負載下鎖競爭與 yield 切換效能。
# 8K 區塊循序寫入 sysbench --num-threads=12 --max-requests=10000 --test=memory \ --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run # 8K 區塊隨機寫入 sysbench --num-threads=12 --max-requests=10000 --test=memory \ --memory-block-size=8K --memory-total-size=100G --memory-access-mode=rnd run # 16K 區塊循序/隨機 sysbench --num-threads=12 --max-requests=10000 --test=memory \ --memory-block-size=16K --memory-total-size=100G --memory-access-mode=seq run sysbench --num-threads=12 --max-requests=10000 --test=memory \ --memory-block-size=16K --memory-total-size=100G --memory-access-mode=rnd run
結果摘要:
| 區塊/模式 | 耗時 | 吞吐量 |
|---|---|---|
| 8K 循序 | 13.2s | 7.7 GB/s |
| 8K 隨機 | 12.7s | 8.1 GB/s |
| 16K 循序 | 7.9s | 13.0 GB/s |
| 16K 隨機 | 6.4s | 15.9 GB/s |
結論:區塊越大吞吐越高;隨機存取反而略快於循序(CPU 快取預取機制影響)。
# 準備 3GB 測試檔 sysbench --num-threads=12 --max-requests=10000 --test=fileio \ --file-total-size=3G --file-test-mode=rndrw prepare # 執行隨機讀寫測試 sysbench --num-threads=12 --max-requests=10000 --test=fileio \ --file-total-size=3G --file-test-mode=rndrw run # 清理 sysbench --num-threads=12 --max-requests=10000 --test=fileio \ --file-total-size=3G --file-test-mode=rndrw cleanup
關鍵參數:--file-test-mode (seqwr/seqrd/rndrw/rndwr/rndrd)、--file-io-mode (sync/async/mmap)、--file-rw-ratio(讀寫比)。

測試機 IO 約 38 MB/s。比較兩台伺服器 IO 效能時,必須使用相同線程數與參數。
sysbench --num-threads=12 --test=mutex --mutex-num=1024 --mutex-locks=10000 --mutex-loops=10000 run
模擬高併發鎖競爭場景。
# 1. 準備資料:10 張表,各 100 萬筆 sysbench --num-threads=12 --max-requests=100000 --test=oltp \ --mysql-user=root --mysql-password=root --mysql-db=sbtest \ --oltp-table-size=1000000 --oltp-num-tables=10 prepare # 2. 執行複合事務測試 sysbench --num-threads=12 --max-requests=100000 --test=oltp \ --mysql-user=root --mysql-password=root --mysql-db=sbtest \ --oltp-table-size=1000000 --oltp-num-tables=10 run # 3. 清理 sysbench --num-threads=12 --max-requests=100000 --test=oltp \ --mysql-user=root --mysql-password=root --mysql-db=sbtest \ --oltp-table-size=1000000 --oltp-num-tables=10 cleanup
測試報告關鍵指標:
每個事務包含:點查詢、範圍查詢、SUM/ORDER BY/DISTINCT、索引/非索引 UPDATE、DELETE、INSERT。
| 參數 | 說明 | 預設 |
|---|---|---|
| --oltp-test-mode | simple/complex/nontrx/sp | complex |
| --oltp-table-size | 每表筆數 | 10000 |
| --oltp-num-tables | 表數量 | 1 |
| --oltp-read-only | 唯讀模式 | off |
| --mysql-table-engine | 引擎:innodb/myisam | innodb |
| --oltp-point-selects | 每事務點查詢數 | 10 |
| --oltp-range-size | 範圍查詢跨度 | 100 |
sysbench 功能最完整、報告最詳細、社群最活躍的基準工具。建議建立標準化測試流程(固定參數、資料量、執行時間),每次資料庫調優前後對比,量化效能提升。