模塊化、跨平台、多線程基準測試工具,支持 CPU、磁盤 IO、內存、線程、調度器、數據庫 (OLTP) 等多維度壓測。支持 MySQL、PostgreSQL、Oracle。
# 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 # 需對應開發庫
sysbench --test=cpu --cpu-max-prime=20000 run
# --cpu-max-prime: 最大素數,根據 CPU 性能調整
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
# 準備測試文件 (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(隨機寫)
sysbench --test=memory --memory-block-size=8K --memory-total-size=4G run
# --memory-block-size: 塊大小
# --memory-total-size: 總傳輸量
# 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-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 (生產用事務) |
innodb_buffer_pool_size、innodb_io_capacity),觀察 TPS/P99 變化pmm/grafana 監控 CPU、IO、鎖等待、緩存命中、Binlog 同步延遲tpcc (sysbench 內建) 或自定義 Lua 腳本模擬業務 SQL