1️⃣ 系统准备
- 系统:Rocky Linux 9.6
- MySQL 版本:8.0.39
- 数据库账号:
sbtest/ 密码SbTest@123456 - 数据库名称:
sbtest
如果你使用 Windows,也可以通过虚拟机安装 Linux 做测试。
2️⃣ 安装 Sysbench
- 配置 Sysbench 官方仓库:
bash
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
- 安装 Sysbench:
bash
sudo yum -y install sysbench
- 验证安装:
bash
sysbench --version
正常显示版本号即可。
3️⃣ MySQL 数据库准备
- 登录 MySQL 并创建测试库:
bash
mysql -u root -p -e "CREATE DATABASE sbtest;"
- 确保
sbtest用户有权限访问sbtest数据库:
bash
mysql -u root -p -e "GRANT ALL PRIVILEGES ON sbtest.* TO 'sbtest'@'127.0.0.1'; FLUSH PRIVILEGES;"
- 测试连接:
bash
mysql -u sbtest -pSbTest@123456 -h127.0.0.1 sbtest
成功连接即可。
4️⃣ 构造测试表与测试数据
使用 Sysbench prepare 命令生成数据:
bash
sysbench \
--db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbtest \
--mysql-password=SbTest@123456 \
--mysql-db=sbtest \
--tables=20 \
--table-size=1000000 \
oltp_read_write \
--db-ps-mode=disable \
prepare
参数说明:
| 参数 | 说明 |
|---|---|
--tables=20 |
创建 20 张测试表 |
--table-size=1000000 |
每张表 100 万条数据 |
oltp_read_write |
测试类型:读写模式 |
--db-ps-mode=disable |
禁用 Prepared Statements |
prepare |
生成表和数据 |
执行完成后,会在
sbtest数据库中生成sbtest1~sbtest20测试表。
5️⃣ 执行压测
5.1 综合读写压测
bash
sysbench \
--db-driver=mysql \
--time=300 \
--threads=10 \
--report-interval=1 \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbtest \
--mysql-password=SbTest@123456 \
--mysql-db=sbtest \
--tables=20 \
--table-size=1000000 \
oltp_read_write \
--db-ps-mode=disable \
run
--time=300:压测 300 秒--threads=10:使用 10 个并发线程--report-interval=1:每秒输出一次统计信息
5.2 只读压测
bash
sysbench \
--db-driver=mysql \
--time=300 \
--threads=10 \
--report-interval=1 \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbtest \
--mysql-password=SbTest@123456 \
--mysql-db=sbtest \
--tables=20 \
--table-size=1000000 \
oltp_read_only \
--db-ps-mode=disable \
run
5.3 插入/更新/删除等专项测试
- 删除性能:
bash
oltp_delete
- 更新索引字段:
bash
oltp_update_index
- 更新非索引字段:
bash
oltp_update_non_index
- 插入性能:
bash
oltp_insert
- 写入性能(纯写):
bash
oltp_write_only
命令用法一致,只需把 oltp_read_write 换成对应模式即可。
6️⃣ 清理测试数据
bash
sysbench \
--db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sbtest \
--mysql-password=SbTest@123456 \
--mysql-db=sbtest \
--tables=20 \
--table-size=1000000 \
oltp_read_write \
--db-ps-mode=disable \
cleanup
清理后
sbtest1~sbtest20表会被删除。
7️⃣ 压测结果说明
Sysbench 会输出每秒统计以及最终汇总报告:
每秒统计示例
[ 22s ] thds: 10 tps: 380.99 qps: 7312.66 (r/w/o: 5132.99/1155.86/1321.35) lat (ms, 95%): 21.33 err/s: 0.00 reconn/s: 0.00
thds:线程数tps:每秒事务数qps:每秒请求数(r/w/o):读/写/其他请求数lat (ms, 95%):95% 请求延迟err/s:每秒错误请求数reconn/s:每秒重连数
总体汇总示例
transactions: 105180 ( 350.6 per sec.)
queries: 2103977 ( 7013.26 per sec.)
Latency (ms): min: 4.32, avg: 13.42, max: 45.56, 95th percentile: 21.33
- 总事务数、QPS、平均/最大/最小延迟、95% 请求延迟
- 错误和重连数帮助判断数据库稳定性
压测结果会根据硬件、MySQL 配置、表大小和并发线程数不同而差异很大。
✅ 总结
- 安装 Sysbench 并验证
- 创建测试数据库
sbtest和用户sbtest - 使用
prepare构造数据表 - 使用
run进行各种类型压测 - 使用
cleanup清理数据 - 分析每秒统计和最终汇总报告