自带的并发压测工具
mysqlslap 是 MySQL 客户端自带的压测程序,能模拟多个并发客户端反复执行同一批 SQL,输出平均、最小、最大耗时,适合在参数调整或索引改造前后做相对对比。它不自带事务语义分析与业务建模能力,因此结论只适合横向比较,不适合直接当作容量结论。
基本信息
| 适用 | MySQL 5.7 / 8.0 客户端自带,无需额外安装 |
|---|---|
| 核心参数 | --concurrency、--iterations、--number-of-queries |
| 两种模式 | 指定 --query 跑现成 SQL,或用 --auto-generate-sql 自动建表 |
| 注意事项 | 对比测试必须固定并发、轮次、查询数与环境 |
并发查询压测
并发查询压测
mysqlslap --host=127.0.0.1 --user=bench --password=*** --concurrency=50 --iterations=5 --number-of-queries=1000 --query="SELECT id FROM users WHERE status=1" --create-schema=bench # 50 并发执行 1000 次查询
mysqlslap --host=127.0.0.1 --user=bench --password=*** --concurrency=10,50,100 --iterations=3 --query="SELECT id FROM users WHERE status=1" --create-schema=bench # 梯度压测看拐点
mysqlslap --host=127.0.0.1 --user=bench --password=*** --concurrency=50 --number-of-queries=1000 --query="SELECT id FROM users WHERE status=1" --create-schema=bench --csv=/tmp/slap.csv # 输出 CSV 便于归档对比自动生成表压测
自动生成表压测
mysqlslap --host=127.0.0.1 --user=bench --password=*** --concurrency=10,50,100 --iterations=3 --number-int-cols=4 --number-char-cols=20 --auto-generate-sql --engine=InnoDB --create-schema=bench2 # 自动建表并压测
mysqlslap --host=127.0.0.1 --user=bench --password=*** --auto-generate-sql-load-type=write --concurrency=20 --iterations=3 --engine=InnoDB --create-schema=bench2 # 只压写入路径参数怎么读
| 参数 | 含义 | 使用建议 |
|---|---|---|
| --concurrency | 并发客户端数,可逗号分隔多档 | 梯度设置找出吞吐拐点 |
| --iterations | 整套压测重复轮次 | 至少 3 轮,取稳定值而非首轮 |
| --number-of-queries | 总查询数 | 单客户端实际执行数 = 总数 / 并发数 |
| --auto-generate-sql | 自动建表并生成 SQL | 用于快速对比参数,不代表业务负载 |
| --engine / --number-*-cols | 生成表的引擎与列数 | 必须固定,否则跨轮次不可比 |
典型使用场景
- 参数调整前后对比同一语句的耗时变化,例如缓冲池大小
- 索引上线前验证目标语句在并发下的表现是否改善
- 上线前做连接数与并发的摸底,观察吞吐从哪一档开始下滑
- 复现并发热点:用相同语句多并发触发锁等待与竞争
- 把结果导成 CSV 归档,形成版本间的性能基线
不要在生产库上跑 mysqlslap:自动生成 SQL 会产生真实写入与锁竞争,压测一律在隔离环境进行,并避免与备份窗口重叠。
对比测试的纪律是每次只改一个变量:并发、轮次、查询数、生成表结构与引擎都要固定,否则测量结果无法解释。