首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

sysbench MySQL 效能基準測試完整教學:安裝、OLTP 壓測、結果解讀與最佳實務

     編輯:MySQL 資料庫相關知識

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

關鍵參數解析

四、測試結果解讀範例

[  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 越小越好。

五、最佳實務建議

  1. 持續壓測 ≥ 30 分鐘,預熱穩定後數據才具參考性。
  2. 多組 --num-threads(如 16, 32, 64, 128)測試擴展性拐點。
  3. 對比不同 --rand-type 模擬不同業務存取模式。
  4. 記錄硬體配置、MySQL 參數(innodb_buffer_pool_size、innodb_flush_log_at_trx_commit 等)以便複現。
  5. 配合 iostat、mpstat、perf 系統級指標關聯分析瓶頸。
  6. 結果輸出 CSV/JSON 便於自動化圖表化與 CI 整合。

sysbench 是 MySQL 效能基線建立、版本升級驗證、硬體選型的標準工具,掌握其用法是 DBA 必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數含義
--num-threads=88 條並發連線
--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=9999 分位數響應時間(丟棄 1% 長尾)