MySQL 5.1.4+ 內置,模擬多併發客戶端負載,支持自動生成測試表/數據或自定義 SQL,輸出 TPS、QPS、延遲等核心指標。
| 參數 | 短參 | 說明 | 典型值 |
|---|---|---|---|
| --auto-generate-sql | -a | 自動生成測試表結構與數據 | 必加 |
| --auto-generate-sql-load-type | 負載類型:read/write/update/key/mixed | mixed | |
| --concurrency | -c | 併發客戶端數,支持逗號分隔多值 | 50,100,200 |
| --iterations | -i | 每組併發重複測試次數(取平均) | 5-10 |
| --number-of-queries | 總查詢數 = 併發數 × 每客戶查詢數 | 1000 | |
| --engine | -e | 測試表存儲引擎,可多值對比 | innodb,myisam |
| --create-schema | 指定測試庫(會自動建庫建表) | test_db | |
| --query | -q | 自定義 SQL 文件/語句(替代自動生成) | ./load.sql |
| --debug-info | -T | 輸出 CPU/內存佔用 | 可選 |
| --only-print | 僅打印生成的 SQL 不執行 | 調試用 | |
| --number-int-cols / --number-char-cols | -y / -x | 自動生成表的 int/char 列數 | 各 1-5 |
# 單線程基線
mysqlslap -a -u root -p --create-schema=bench --engine=innodb
# 併發壓測
mysqlslap -a -c 100 -u root -p --create-schema=bench --engine=innodb
# 多輪迭代取平均
mysqlslap -a -c 100 -i 5 -u root -p --create-schema=bench --engine=innodb
# 讀寫負載對比
mysqlslap -a --auto-generate-sql-load-type=read -c 50,100 -i 3 -u root -p
mysqlslap -a --auto-generate-sql-load-type=write -c 50,100 -i 3 -u root -p
# 引擎對比
mysqlslap -a -c 100 -i 5 --engine=innodb,myisam --create-schema=bench -u root -p
# 併發梯度 + 總查詢數固定
mysqlslap -a --concurrency=50,100,200 --number-of-queries=10000 -i 5 -u root -p
# 1. 準備 SQL 文件(每行一條,包含參數佔位符 ?)
cat > workload.sql <<'EOF'
SELECT * FROM orders WHERE user_id = ? AND status = ?;
UPDATE accounts SET balance = balance - ? WHERE id = ?;
INSERT INTO logs (action, uid, ctime) VALUES (?, ?, NOW());
EOF
# 2. 執行壓測(需配合 --csv 或程序化參數綁定,mysqlslap 原生不支持參數化)
# 實際生產建議使用 sysbench / go-tpc / 自研壓測平台支持參數化
mysqlslap --query=workload.sql --create-schema=bench -c 100 -i 5 -u root -p
Benchmark
Average number of seconds to run all queries: 2.453 seconds
Minimum number of seconds to run all queries: 2.312 seconds
Maximum number of seconds to run all queries: 2.678 seconds
Number of clients running queries: 100
Average number of queries per client: 100
# 關鍵衍生指標
QPS = 總查詢數 / 平均耗時 = 10000 / 2.453 ≈ 4077
TPS = 視事務定義而定
平均延遲 = 平均耗時 / 總查詢數 × 併發數 ≈ 24.5 ms
--iterations--querySHOW ENGINE INNODB STATUS、Performance Schema、系統負載| 工具 | 優勢 | 適用場景 |
|---|---|---|
| mysqlslap | 零安裝、語法簡單、快速基線 | 快速驗證參數調優效果、簡單讀寫負載 |
| sysbench | Lua 腳本靈活、支持事務/參數化、OLTP 基準標準 | 標準化基準測試、複雜業務邏輯壓測 |
| go-tpc | TPC-C/TPC-H 標準負載、分佈式協調 | 企業級基準測試、分佈式數據庫評估 |
| 自研平台 | 全鏈路可控、業務語義精準、CI/CD 集成 | 核心業務回歸性能測試、發布質量閘 |
mysqlslap 是入門級壓測利器,善用多併發梯度、多引擎對比、迭代取平均,可快速產出可信的性能基線報告。