Sysbench 是模塊化、跨平台、多線程的基準測試工具,廣泛用於數據庫性能評估。本文覆蓋源碼編譯安裝、六大測試模塊用法、MySQL OLTP 專項實戰與常見坑點。
wget https://github.com/akopytov/sysbench/archive/1.0.zip # 官方已遷移 GitHub,推薦 1.0+ 版本 # 老版本 SourceForge: https://sourceforge.net/projects/sysbench/
# CentOS/RHEL yum install -y gcc gcc-c++ make automake libtool openssl-devel mariadb-devel # Ubuntu/Debian apt-get install -y build-essential libssl-dev libmysqlclient-dev
unzip sysbench-1.0.zip && cd sysbench-1.0 ./autogen.sh # 生成 configure (GitHub 源碼必須) ./configure && make -j$(nproc) && make install
./configure \ --with-mysql-includes=/usr/local/mysql/include \ --with-mysql-libs=/usr/local/mysql/lib \ --without-pgsql --without-oracle # 禁用不需要的驅動 make && make install
關鍵:確保 libmysqlclient.so 存在於指定 lib 目錄,否則鏈接失敗。若報 libtool 錯誤,嘗試 ./autogen.sh 重新生成構建腳本。
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf ldconfig # 或臨時: export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
| 模塊 | 測試命令示例 | 核心參數 | 適用場景 |
|---|---|---|---|
| CPU | sysbench cpu --cpu-max-prime=20000 --threads=4 run | max-prime, threads | 素數運算,CPU 吞吐基準 |
| Threads | sysbench threads --threads=64 --thread-yields=100 --thread-locks=2 run | yields, locks | 線程切換/同步開銷 |
| FileIO | 見下文三步走 | file-total-size, file-test-mode | 磁盤順序/隨機讀寫、延遲 |
| Memory | sysbench memory --memory-block-size=8K --memory-total-size=4G --threads=4 run | block-size, total-size | 內存帶宽、延遲 |
| Mutex | sysbench mutex --threads=16 --mutex-num=1024 --mutex-locks=10000 run | mutex-num, locks | 互斥鎖性能 |
| OLTP | 見專項章節 | tables, table-size, threads | 數據庫事務吞吐、延遲 |
# 1. 準備 3GB 測試文件集 (16線程, 隨機讀寫) sysbench fileio --threads=16 --file-total-size=3G --file-test-mode=rndrw prepare # 2. 運行測試 sysbench fileio --threads=16 --file-total-size=3G --file-test-mode=rndrw run # 3. 清理文件 sysbench fileio --threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
file-test-mode 可選:seqrd (順序讀), seqwr (順序寫), rndrd (隨機讀), rndwr (隨機寫), rndrw (混合)。
sysbench oltp_read_write \ --mysql-host=127.0.0.1 --mysql-port=3306 \ --mysql-user=sbtest --mysql-password=sbtest \ --mysql-db=sbtest \ --tables=10 --table-size=1000000 \ --mysql-storage-engine=innodb \ --db-driver=mysql prepare
注意:參數 --mysql-table-engine 已廢棄,改用 --mysql-storage-engine。需預建庫 sbtest 並授權用戶。
sysbench oltp_read_write \ --mysql-host=127.0.0.1 --mysql-port=3306 \ --mysql-user=sbtest --mysql-password=sbtest \ --mysql-db=sbtest \ --tables=10 --table-size=1000000 \ --threads=64 --time=300 --report-interval=10 \ --db-driver=mysql run
關鍵指標:transactions (TPS), latency (ms, 95%), queries (QPS), errors。
oltp_read_only:純 SELECT 範圍/點查,測試讀擴展能力。oltp_write_only:純 INSERT/UPDATE/DELETE,測試寫入極限。sysbench oltp_read_write --mysql-db=sbtest --db-driver=mysql cleanup
%us 高 → 優化 SQL、索引、減少解析。iowait 高、FileIO 延遲大 → 調整 innodb_io_capacity、換 SSD、優化刷頁策略。