`mysqlslap` 是 MySQL 5.1+ 內置的基準測試工具,類似 `ab`/`wrk` 之於 HTTP,專為數據庫負載測試設計。本文系統整理核心參數、實戰模板、報告解讀,並對比 `sysbench` 給出選型建議。
| 參數 | 短參 | 說明 | 典型值 |
|---|---|---|---|
| --auto-generate-sql | -a | 自動生成測試 SQL(建表、插入、查詢、更新) | 必加 |
| --concurrency | -c | 並發客戶端數(模擬併發用戶) | 10,50,100,200 |
| --iterations | -i | 測試重複次數(取平均值) | 3-5 |
| --number-of-queries | -q | 每個客戶端執行的查詢總數 | 10000 |
| --engine | -e | 測試存儲引擎,可多個用逗號分隔 | innodb,myisam |
| --create-schema | 測試目標數據庫 | test_db | |
| --query | -q | 自定義測試 SQL(文件或語句) | "SELECT * FROM t" |
| --delimiter | -F | 語句分隔符 | ";" |
| --csv | 輸出 CSV 格式報告 | /tmp/report.csv | |
| --verbose | -v | 詳細輸出模式 | 1-3 |
| --user/--password/--host/--port | -u/-p/-h/-P | 連接參數 | root/xxx/127.0.0.1/3306 |
mysqlslap -u root -p'Passw0rd' -h 127.0.0.1 -P 3306 \ --create-schema=test_db \ --auto-generate-sql \ --concurrency=50,100,200 \ --iterations=3 \ --number-of-queries=10000 \ --engine=innodb \ --verbose=2
輸出關鍵指標:Average time (秒)、Min/Max time、Clients running、Queries per second。
# 測試存儲過程調用性能 mysqlslap -u root -p'Passw0rd' \ --create-schema=biz_db \ --delimiter=";" \ --query="CALL sp_get_user_orders(?, ?);" \ --concurrency=100,200,400 \ --number-of-queries=100000 \ --csv=/tmp/sp_benchmark.csv
mysqlslap -a -e "innodb,myisam" --csv=/tmp/engine_compare.csv
| 場景 | 參數組合 | 說明 |
|---|---|---|
| 測試寫入性能 | --auto-generate-sql-load-type=write | 純 INSERT/UPDATE |
| 測試讀取性能 | --auto-generate-sql-load-type=read | 純 SELECT |
| 測試混合負載 | --auto-generate-sql-load-type=mixed | 讀寫混合(默認) |
| 指定索引數量 | --auto-generate-sql-secondary-indexes=3 | 模擬真實表結構 |
| 指定字段類型 | --number-int-cols=5 --number-char-cols=10 | 控制生成表結構 |
| 預熱後測試 | --pre-query="SELECT 1" --post-query="SELECT 1" | 排除冷啟動影響 |
| 模擬長連接 | --detach=1000 | 每 1000 條斷開重連 |
| 維度 | mysqlslap | sysbench |
|---|---|---|
| 安裝部署 | MySQL 內置,零依賴 | 需單獨安裝(Lua 腳本引擎) |
| 測試模式 | 內置自動生成 + 自定義 SQL | Lua 腳本完全可編程(OLTP、只讀、只寫、自定義) |
| 報告豐富度 | 基礎文本/CSV | 詳細統計(延遲分位數、錯誤率、TPS 曲線) |
| 分佈式壓測 | 不支援 | 支援多機協同壓測 |
| 適用階段 | 快速驗證、單機基準、CI/CD 集成 | 正式性能基線、容量規劃、架構優化驗證 |
建議:日常開發、代碼合併前用 `mysqlslap` 快速跑分;發布前、架構變更後用 `sysbench` 出正式報告。
`mysqlslap` 雖功能不如 `sysbench` 全面,但**零安裝、語法簡單、內置自動生成 SQL** 使其成為 MySQL 開發者、DBA 手邊最高效的「隨時可用」壓測工具。掌握核心參數組合、建立標準化壓測腳本庫,能將性能驗證從「感覺慢」轉變為「數據說話」,為上線決策提供量化依據。