本文詳細記錄 Sysbench 0.5 版本 的原始碼編譯安裝、Yum 快速安裝,以及針對 MySQL 的 只讀(Read-Only)OLTP 壓力測試 完整流程,包含測試資料準備、參數深度解析、多線程測試執行與結果分析。
# 安裝編譯依賴
yum install mysql mysql-devel libtool openssl-devel openssl-static mysql-community-devel -y
# 獲取源碼
cd /tmp
git clone https://github.com/akopytov/sysbench.git
cd sysbench
# 生成配置腳本並配置
./autogen.sh
./configure --prefix=/usr/local/sysbench
# 若需支援 PostgreSQL/Oracle,加上 --with-pgsql 或 --with-oracle
# 編譯安裝(使用所有 CPU 核心加速)
make -j $(nproc) && make install
# 複製測試腳本(oltp.lua 等)
cp -ai sysbench/tests /usr/local/sysbench/
# 設定環境變數
echo 'export PATH=/usr/local/sysbench/bin:$PATH' > /etc/profile.d/sysbench.sh
source /etc/profile.d/sysbench.sh
# 驗證
which sysbench
sysbench --version
# 輸出: sysbench 0.5
yum install https://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm -y
yum install sysbench -y
注意:Yum 版本可能較舊,生產環境建議編譯安裝最新版。
mysql -uroot -p**** -h10.10.231.149 -P3317 -e 'CREATE DATABASE sysbench;'
mysql -uroot -p**** -h10.10.231.149 -P3317 -e "GRANT ALL PRIVILEGES ON *.* TO 'sysbench'@'10.%.%.%' IDENTIFIED BY 'lookback';"
sysbench --test=oltp --test=/usr/local/sysbench/tests/db/oltp.lua \
--db-driver=mysql --oltp-table-size=10000000 \
--mysql-db=sysbench --mysql-user=sysbench --mysql-password=lookback \
--mysql-host=10.10.231.149 --mysql-port=3317 prepare
關鍵階段:prepare 建表並填充資料;run 執行壓測;cleanup 清理資料。
mysql -usysbench -plookback -h10.10.231.149 -P3317 -e "SELECT * FROM sysbench.sbtest1 ORDER BY id LIMIT 5;"
執行只讀測試的核心命令:
for i in 1 4 8 16 32 64; do
sysbench --test=oltp --test=/usr/local/sysbench/tests/db/oltp.lua \
--db-driver=mysql --oltp-table-size=10000000 \
--mysql-db=sysbench --mysql-user=sysbench --mysql-password=lookback \
--mysql-host=10.10.231.149 --mysql-port=3317 \
--max-time=60 --max-requests=0 \
--oltp-read-only --oltp-skip-trx \
--oltp-nontrx-mode=select --oltp-dist-type=uniform \
--oltp-test-mode=nontrx --report-interval=10 \
--num-threads=$i run
sleep 10
done
| 參數 | 含義與建議 |
|---|---|
--oltp-read-only | 啟用只讀模式,不產生 UPDATE/DELETE/INSERT,預設 off |
--oltp-skip-trx | 跳過顯式事務,配合 only-read 避免中間件將只讀 SQL 路由至主庫 |
--oltp-nontrx-mode=select | 非事務模式下的查詢類型:select/update_key/update_nokey/insert/delete |
--oltp-dist-type=uniform | 隨機分佈類型:uniform(均勻)、Gaussian(高斯)、special(熱點)。建議關閉 Query Cache 避免鎖爭用 |
--oltp-test-mode=nontrx | 執行模式:simple(簡單查詢)、complex(事務型)、nontrx(非事務型) |
--report-interval=10 | 每 10 秒輸出一次即時統計 |
--max-requests=0 | 總請求數不限制,完全由 --max-time 控制 |
| Threads | TPS (per sec.) | QPS (Read/Write) | Avg Resp (ms) | 95% Resp (ms) | Max Resp (ms) |
|---|---|---|---|---|---|
| 1 | 80.78 | 1454.00 | 12.38 | 13.65 | 112.96 |
| 4 | 296.96 | 5345.30 | 13.47 | 15.66 | 122.42 |
| 8 | 477.27 | 8590.92 | 16.76 | 24.07 | 294.31 |
| 16 | 682.58 | 12286.43 | 23.44 | 32.15 | 2295.61 |
| 32 | 978.89 | 17620.08 | 32.67 | 49.49 | 732.59 |
| 64 | 1076.69 | 19380.45 | 59.43 | 103.48 | 1045.31 |

--oltp-read-only,Sysbench 0.5 輸出仍顯示 writes(內部統計機制),實際無寫入操作。事務數恆為 0,TPS 需用 total events / total time 計算。--percentile=98 調整分位數。--oltp-skip-trx,以 total number of events / total time 計算實際 TPS。read/write requests / total time 得到吞吐量。mpstat、iostat、vmstat 監控 CPU、I/O、記憶體瓶頸。Sysbench 只讀測試能有效評估 MySQL 讀取擴展能力。生產環境調優時,建議:
innodb_buffer_pool_size、innodb_read_io_threads 設定下的讀取性能。query_cache_type=0)進行測試,避免鎖爭用干擾。--oltp-dist-type=special 模擬熱點資料訪問場景。