萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Sysbench 安裝部署與 MySQL 只讀負載壓測實戰

本文詳細記錄 Sysbench 0.5 版本 的原始碼編譯安裝、Yum 快速安裝,以及針對 MySQL 的 只讀(Read-Only)OLTP 壓力測試 完整流程,包含測試資料準備、參數深度解析、多線程測試執行與結果分析。

一、 Sysbench 安裝部署

1. 原始碼編譯安裝(推薦,支援最新特性)

# 安裝編譯依賴
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

2. Yum 快速安裝(Percona 倉庫)

yum install https://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm -y
yum install sysbench -y
注意:Yum 版本可能較舊,生產環境建議編譯安裝最新版。

二、 測試環境準備

  1. 建立測試資料庫:
    mysql -uroot -p**** -h10.10.231.149 -P3317 -e 'CREATE DATABASE sysbench;'
  2. 建立測試帳號並授權:
    mysql -uroot -p**** -h10.10.231.149 -P3317 -e "GRANT ALL PRIVILEGES ON *.* TO 'sysbench'@'10.%.%.%' IDENTIFIED BY 'lookback';"
  3. 準備測試資料(1000 萬筆,約 2GB):
    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 清理資料。

  4. 驗證資料結構:
    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)
180.781454.0012.3813.65112.96
4296.965345.3013.4715.66122.42
8477.278590.9216.7624.07294.31
16682.5812286.4323.4432.152295.61
32978.8917620.0832.6749.49732.59
641076.6919380.4559.43103.481045.31
只讀測試結果圖表

關鍵觀察

  • 線性擴展區(1-16 線程): TPS 與 QPS 隨線程近似線性增長,延遲可控。
  • 擴展放緩區(32 線程): TPS 增長放緩,平均延遲明顯上升至 32ms,95 分位近 50ms。
  • 飽和區(64 線程): TPS 僅微增至 1076,但平均延遲飆升至 59ms,95 分位超 100ms,最大延遲超 1 秒,系統進入嚴重排隊狀態。
  • 只讀模式特徵: 雖設定 --oltp-read-only,Sysbench 0.5 輸出仍顯示 writes(內部統計機制),實際無寫入操作。事務數恆為 0,TPS 需用 total events / total time 計算。

五、 核心監控指標建議

  1. Response Time Avg (95%): 核心 SLA 指標,可透過 --percentile=98 調整分位數。
  2. Transactions (TPS): 若使用 --oltp-skip-trx,以 total number of events / total time 計算實際 TPS。
  3. Read/Write Requests (QPS): read/write requests / total time 得到吞吐量。
  4. 系統層指標: 結合 mpstat、iostat、vmstat 監控 CPU、I/O、記憶體瓶頸。

六、 總結

Sysbench 只讀測試能有效評估 MySQL 讀取擴展能力。生產環境調優時,建議:

  • 對比不同 innodb_buffer_pool_size、innodb_read_io_threads 設定下的讀取性能。
  • 關閉 Query Cache(query_cache_type=0)進行測試,避免鎖爭用干擾。
  • 結合 --oltp-dist-type=special 模擬熱點資料訪問場景。
  • 逐步增加線程數(如 16, 36, 72, 128, 256, 512)尋找系統吞吐量拐點與延遲接受閾值的平衡點。
copyright © 萬盛學電腦網 all rights reserved