首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

sysbench 安裝與 MySQL OLTP 基準測試實戰指南

     編輯:MySQL 綜合教學

sysbench 簡介

模塊化、跨平台、多線程基準測試工具,支持 CPU、磁盤 IO、內存、線程、調度器、數據庫 (OLTP) 等多維度壓測。支持 MySQL、PostgreSQL、Oracle。

安裝編譯 (源碼方式,靈活指定 MySQL 路徑)


# 1. 下載源碼
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz -O sysbench-1.0.20.tar.gz
# 或 SourceForge 老版本

# 2. 安裝依賴
sudo apt-get install make automake libtool pkg-config libaio-dev libmysqlclient-dev libssl-dev libpq-dev  # Ubuntu/Debian
# sudo yum install make automake libtool pkgconfig libaio-devel mysql-devel openssl-devel postgresql-devel  # CentOS/RHEL

# 3. 編譯安裝 (標準 MySQL 路徑)
tar zxf sysbench-1.0.20.tar.gz
cd sysbench-1.0.20
./autogen.sh
./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql
make -j$(nproc)
sudo make install

# 4. 非標準 MySQL 路徑 (如 /usr/local/mysql)
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
# 確保 lib 目錄有 libmysqlclient.so

# 5. 支持 PostgreSQL/Oracle
./configure --with-pgsql --with-oracle  # 需對應開發庫

核心測試模塊與命令示例

1. CPU 性能 (素數運算)


sysbench --test=cpu --cpu-max-prime=20000 run
# --cpu-max-prime: 最大素數,根據 CPU 性能調整

2. 線程調度性能


sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

3. 磁盤 IO 性能 (文件 IO)


# 準備測試文件 (3G, 16線程)
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
# 運行測試
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
# 清理文件
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
# 模式: seqwr(順寫)/seqrew(順讀)/seqrd(順讀)/rndrw(隨機讀寫)/rndrd(隨機讀)/rndwr(隨機寫)

4. 內存吞吐性能


sysbench --test=memory --memory-block-size=8K --memory-total-size=4G run
# --memory-block-size: 塊大小
# --memory-total-size: 總傳輸量

5. OLTP 數據庫基準測試 (核心重點)


# 1. 準備階段: 創建測試表、插入數據
sysbench --test=oltp \
  --mysql-table-engine=innodb \          # 表引擎 (官網舊參數 --mysql-table-type 已棄用)
  --oltp-table-size=1000000 \            # 測試表行數 (100萬)
  --mysql-socket=/tmp/mysql.sock \       # 連接方式
  --mysql-user=sbtest --mysql-password=sbtest \
  --mysql-host=127.0.0.1 --mysql-port=3306 \
  --mysql-db=sbtest \                    # 目標庫 (需預先創建)
  --tables=10 \                          # 測試表數量
  --threads=16 \                         # 併發線程數
  prepare

# 2. 運行階段: 執行混合讀寫事務
sysbench --test=oltp \
  --mysql-table-engine=innodb \
  --oltp-table-size=1000000 \
  --mysql-user=sbtest --mysql-password=sbtest \
  --mysql-host=127.0.0.1 --mysql-port=3306 \
  --mysql-db=sbtest \
  --tables=10 \
  --threads=16 \
  --time=300 \                           # 測試持續時間 (秒)
  --report-interval=10 \                 # 報告間隔
  run

# 3. 清理階段
sysbench --test=oltp ... cleanup

OLTP 測試關鍵參數解析

參數說明建議值
--oltp-table-size單表行數≥ 生產表行數,測試真實壓力
--tables測試表數量10-100,模擬多表場景
--threads併發線程數從 1, 4, 8, 16, 32, 64, 128... 遞增,找拐點
--time測試時長300-3600秒,預熱後穩態期觀察
--report-interval報告間隔10-30秒
--mysql-table-engine表引擎innodb (生產標準)
--oltp-read-only純讀模式on/off,分離測試讀寫能力
--oltp-skip-trx跳過事務 (自動提交)off (生產用事務)

結果解讀關鍵指標

  • TPS (Transactions Per Second):核心吞吐指標
  • QPS (Queries Per Second):SQL 執行率
  • Latency (avg/95%/99%/max):響應時間分布,**P99 延遲最關鍵**
  • Errors / Reconnects:錯誤/重連數,應為 0
  • Threads fairness:線程公平性,關注調度均衡

最佳實踐建議

  1. 預熱**:正式測試前跑 5-10 分鐘預熱,填滿 Buffer Pool、熱索引頁
  2. 基線對比**:同配置跑多輪,取穩態中位數,排除抖動
  3. 單變量實驗**:一次調一個參數 (如 innodb_buffer_pool_size、innodb_io_capacity),觀察 TPS/P99 變化
  4. 監控全鏈路**:配合 pmm/grafana 監控 CPU、IO、鎖等待、緩存命中、Binlog 同步延遲
  5. 模擬真實負載**:sysbench 標準 OLTP 較簡單,生產驗證建議用 tpcc (sysbench 內建) 或自定義 Lua 腳本模擬業務 SQL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved