sysbench 基准压测是什么
sysbench 是常用的 MySQL 压测工具,可以造测试数据、跑 OLTP 读写混合场景,并输出 TPS、QPS 与延迟分布。它的核心价值是给出可比较的基线:数据量、并发数、机器配置、数据库参数和版本都要固定,否则两组结果没有可比性,也无法判断调参是否真的有效。
基本信息
| 安装方式 | yum install sysbench / apt install sysbench |
|---|---|
| 常用场景 | oltp_read_write / oltp_read_only / oltp_point_select |
| 关键参数 | --tables / --table-size / --threads / --time / --report-interval |
| 三段动作 | prepare 造数、run 压测、cleanup 清理 |
| 隔离要求 | 压测库必须与生产实例分离 |
典型使用场景
- 新硬件验收:同等参数下对比新旧机器的 QPS 与延迟
- 调参对比:只改一组参数,前后各跑一次固定场景
- 容量评估:按预期业务量推算所需实例规格
- 寻找拐点:并发逐级上调,看 QPS 何时不再增长
- 复现问题:在压测环境放大负载,稳定复现线上抖动
- 评估备份影响:压测同时跑备份,观察延迟变化
安装准备、运行与清理
安装准备、运行与清理
yum install -y sysbench # 或 apt install sysbench
sysbench oltp_read_write --mysql-host=127.0.0.1 --mysql-port=3306 \
--mysql-user=bench --mysql-password=强口令 --mysql-db=bench \
--tables=10 --table-size=1000000 --threads=16 prepare # 造数
sysbench oltp_read_write --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=强口令 --mysql-db=bench --tables=10 --table-size=1000000 \
--threads=16 --time=300 --report-interval=10 run # 压测 300 秒
sysbench oltp_read_write --mysql-user=bench --mysql-password=强口令 \
--mysql-db=bench --tables=10 --table-size=1000000 cleanup # 清理数据输出指标读法
| 指标 | 含义 | 看什么 |
|---|---|---|
| transactions per sec | 每秒事务数 TPS | 并发上升时先增后平即拐点 |
| queries per sec | 每秒查询数 QPS | 与 TPS 比例反映单个事务的 SQL 数 |
| Latency avg / p95 | 平均与高位延迟 | 平均正常但 p95 飙升说明有长尾 |
| errors / reconnects | 错误与重连次数 | 非 0 说明连接被打满或超时 |
| thread fairness events | 线程事件分布 | 严重倾斜说明某个线程拖后腿 |
压测库必须与生产隔离;--threads 代表并发连接数,超出 CPU 核数后 QPS 不再涨而延迟飙升,这正是你要找的拐点。
压测数据量要明显大于缓冲池,否则数据全在内存里,测出来的是内存带宽而不是磁盘 IO 能力;判断真实承载力前先确认 buffer pool 命中情况。
每次压测前记录基线快照(版本、参数、数据量、并发数、机器规格),结果统一存档;没有基线的调优只能靠感觉,事后无法证明改进幅度。