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

Sysbench 安裝與性能測試全攻略:從 CPU、IO 到 OLTP 綜合基準

     編輯:MySQL 綜合教學

Sysbench 安裝與性能測試全攻略:從 CPU、IO 到 OLTP 綜合基準

Sysbench 是模塊化、跨平台、多線程的基準測試工具,廣泛用於數據庫性能評估。本文覆蓋源碼編譯安裝、六大測試模塊用法、MySQL OLTP 專項實戰與常見坑點。

一、安裝指南

1. 獲取源碼

wget https://github.com/akopytov/sysbench/archive/1.0.zip  # 官方已遷移 GitHub,推薦 1.0+ 版本
# 老版本 SourceForge: https://sourceforge.net/projects/sysbench/

2. 依賴安裝

# 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

3. 編譯安裝 (標準路徑)

unzip sysbench-1.0.zip && cd sysbench-1.0
./autogen.sh          # 生成 configure (GitHub 源碼必須)
./configure && make -j$(nproc) && make install

4. 指定 MySQL 非標準路徑

./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 重新生成構建腳本。

5. 運行時庫路徑修復

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
# 或臨時: export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

二、六大核心測試模塊

模塊測試命令示例核心參數適用場景
CPUsysbench cpu --cpu-max-prime=20000 --threads=4 runmax-prime, threads素數運算,CPU 吞吐基準
Threadssysbench threads --threads=64 --thread-yields=100 --thread-locks=2 runyields, locks線程切換/同步開銷
FileIO見下文三步走file-total-size, file-test-mode磁盤順序/隨機讀寫、延遲
Memorysysbench memory --memory-block-size=8K --memory-total-size=4G --threads=4 runblock-size, total-size內存帶宽、延遲
Mutexsysbench mutex --threads=16 --mutex-num=1024 --mutex-locks=10000 runmutex-num, locks互斥鎖性能
OLTP見專項章節tables, table-size, threads數據庫事務吞吐、延遲

三、FileIO 三步走:準備 → 運行 → 清理

# 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 (混合)。

四、OLTP 測試實戰:MySQL 專項

1. 準備數據

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 並授權用戶。

2. 運行壓測

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。

3. 只讀/寫入專項

  • oltp_read_only:純 SELECT 範圍/點查,測試讀擴展能力。
  • oltp_write_only:純 INSERT/UPDATE/DELETE,測試寫入極限。

4. 清理

sysbench oltp_read_write --mysql-db=sbtest --db-driver=mysql cleanup

五、結果分析與調優建議

  • CPU 瓶頸:TPS 隨線程增長不再線性,top 看 %us 高 → 優化 SQL、索引、減少解析。
  • IO 瓶頸:iowait 高、FileIO 延遲大 → 調整 innodb_io_capacity、換 SSD、優化刷頁策略。
  • 鎖爭用:高併發下 TPS 下降、錯誤率升 → 檢查熱點行、長事務、隔離級別、分表分庫。
  • 內存不足:Swap 使用、OOM → 增加 Buffer Pool、限制併發、優化排序緩存。

六、避坑指南

  1. 測試機與 DB 機分離,萬兆網卡,避免網絡成瓶頸。
  2. 預熱:正式測試前運行 5-10 分鐘使 Buffer Pool 熱載入。
  3. 多次運行取中位數,排除冷啟動/背景任務干擾。
  4. 記錄完整參數、MySQL 配置、硬件規格,確保可復現。
  5. 生產數據導入測試庫時脫敏,避免合規風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved