引言
如何用Sysbench压测满足mysql生产运行的服务器?
Sysbench返回的压测结果如何解读?
别急,本文会教大家如何使用并且如何解读压测的结果信息,如何对mysql服务器进行压测!
一、Sysbench核心功能全景解析
1.1 工具定位与核心模块
Sysbench是集成了多种测试模式的瑞士军刀式压测工具,其模块化架构如下:
模块名称 | 测试方向 | 关键指标 | 应用场景 |
---|---|---|---|
cpu | 处理器计算能力 | Events/s | 算法类应用验证 |
memory | 内存吞吐性能 | 传输速率(MB/s) | 缓存系统性能评估 |
fileio | 存储IO性能 | IOPS/延迟 | 存储选型验证 |
oltp | 数据库事务处理 | TPS/QPS | 数据库服务器选型 |
threads | 线程调度效率 | 上下文切换耗时 | 高并发应用调优 |
1.2 下载
# 安装
yum -y install sysbench
# 查看已安装版本
sysbench --version
二、全组件压测参数精解
2.1 CPU性能测试(计算密集型场景)
sysbench cpu \
--cpu-max-prime=20000 \
--threads=4 \
--time=60 \
--events=0 \
run
参数释义:
--cpu-max-prime
:质数计算范围,越大cpu计算量越大--events=0
:不限制事件总数,按时间执行--threads
:应与物理核心数一致(非逻辑线程)--time=60
:测试持续 60 秒
结果解析:
Prime numbers limit: 20000 # 计算的质数范围
Number of threads: 1547.54 # 并发线程数
CPU speed:
events per second: 285.74 # 每秒完成的计算次数(越大越好)
General statistics:
total time: 60.0013s # 实际总耗时(接近设定的60秒)
total number of events: 92857 # 60秒内总共完成的计算次数
Latency (ms):
min: 2.35 # 最快一次计算耗时
avg: 2.58 # 平均每次计算耗时
max: 38.4346 # 最慢一次计算耗时
95th percentile: 2.91 # 95%的计算耗时≤2.91ms
主要关注:CPU speed:events per second: 285.74
- 直接体现CPU计算吞吐量,数值越高性能越强
2.2 内存性能测试(带宽验证)
sysbench memory \
--memory-block-size=16K \
--memory-total-size=5G \
--memory-oper=write \
--memory-access-mode=rnd \
--threads=4 \
--time=600 \
run
参数 | 推荐值 | 依据 |
---|---|---|
block-size | 16K | 匹配innodb_page_size配置(默认16K) |
total-size | 5G | 需超过buffer_pool_size(通常设为物理内存75%) |
threads | 16 | 等于物理核心数(双路E5:2×8核) |
access-mode | rnd | 匹配B+树索引访问模式 |
结果解析:
Total operations: 327680 (82003.29 per second) 总操作次数
5120.00 MiB transferred (1281.30 MiB/sec) 总传输数据量(实际内存带宽(1281.30 MiB/sec))
General statistics:
total time: 3.9938s 测试总耗时
total number of events: 327680 等同于Total operations
Latency (ms):
min: 0.01 最快操作耗时
avg: 0.05 平均延迟
max: 7.14 最慢操作耗时
95th percentile: 0.08 95%操作在0.08ms内完成
sum: 15604.66 所有操作累计耗时
Threads fairness:
events (avg/stddev): 81920.0000/0.00 各线程平均操作数
execution time (avg/stddev): 3.9012/0.05 各线程平均耗时(3.9秒)
主要关注:(1281.30 MiB/sec) 该参数为内存带宽
2.3 存储性能测试(IO混合负载)
准备:
sysbench fileio \
--file-total-size=10G \
--file-test-mode=rndrw \
--file-extra-flags=direct \
--time=300 \
--threads=16 \
prepare
测试:
sysbench fileio \
--file-test-mode=rndrw \
--time=300 \
run
参数释义:
--file-test-mode
:seqwr/seqrewr/rndrw(随机读写混合IO模式)--file-total-size=10G
:总测试文件大小,我这里测试的存储性能比较差,所以文件大小只测10G--file-extra-flags
:direct跳过OS缓存,会显著降低速度(绕过缓存),但反映真实磁盘性能--threads=16
:并发线程数
结果解析:
在执行prepare命令的时候,通过iostat观察到磁盘的读写情况
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 2.00 0.00 0.03 32.00 0.00 1.50 0.00 1.50 1.50 0.30
sdc 0.00 0.00 0.00 1.00 0.00 0.00 8.00 0.00 1.00 0.00 1.00 1.00 0.10
sdb 0.00 0.00 0.00 582.00 0.00 9.09 32.00 0.97 1.67 0.00 1.67 1.67 97.20
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 585.00 0.00 9.13 31.96 0.98 1.67 0.00 1.67 1.66 97.20
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
设备 | 状态 | 主要负载类型 | 利用率(%util) | 每秒写操作(w/s) | 吞吐量(wMB/s) |
---|---|---|---|---|---|
sdb | 重度负载 | 顺序小写 | 98.10% | 413 | 6.45 |
dm-0 | 重度负载 | 顺序小写 | 98.10% | 416 | 6.49 |
核心指标解读
指标 | 值 | 健康阈值 | 问题描述 |
---|---|---|---|
%util | 98.1% | <70% | 设备已完全饱和,I/O通道拥塞 |
w/s | 413 | 根据设备类型 | 对于HDD偏高,SSD正常偏低 |
wMB/s | 6.45 | - | 实际带宽利用率低 |
avgrq-sz | 32KB | - | 请求碎片化严重(理想≥128KB) |
await | 2.38ms | <5ms | 队列等待时间可控 |
avgqu-sz | 0.98 | <1 | 存在持续排队但未严重堆积 |
正式测试返回值
File operations:
reads/s: 291.59
writes/s: 194.39
fsyncs/s: 622.10
Throughput:
read, MiB/s: 4.56
written, MiB/s: 3.04
General statistics:
total time: 300.2915s
total number of events: 332743
Latency (ms):
min: 0.00
avg: 0.90
max: 251.79
95th percentile: 3.55
sum: 299449.80
Threads fairness:
events (avg/stddev): 332743.0000/0.00
execution time (avg/stddev): 299.4498/0.00
关键操作指标(基准值为参考范围)
参数 | 数值 | 单位 | 定义 | 性能评价 |
---|---|---|---|---|
reads/s | 291.59 | 次/秒 | 每秒文件读取操作次数 | 中负载水平(SSD典型值:10,000-100,000次/秒,HDD:100-200次/秒) |
writes/s | 194.39 | 次/秒 | 每秒文件写入操作次数 | 存在优化空间(批量写入可提升效率) |
fsyncs/s | 622.10 | 次/秒 | 每秒强制刷盘次数(同步存储介质操作) | 高危操作(机械硬盘fsync成本极高,易成瓶颈) |
read throughput | 4.56 | MiB/s | 数据读取速度 | 低速模式(SSD PCIe4.0理论值5,000MiB/s,HDD≈150MiB/s) |
write throughput | 3.04 | MiB/s | 数据写入速度 | 极低吞吐(提示小文件随机写场景) |
延迟深度解析(单位:毫秒)
指标 | 数值 | 典型参考值 | 异常状态判别 |
---|---|---|---|
min latency | 0.00 | 0.01-0.1ms (SSD) | 直接内存操作场景(page cache命中) |
avg latency | 0.90 | <1ms (NVMe SSD正常) | 硬件性能达标,但需关注高频fsync的影响 |
max latency | 251.79 | <100ms (OLTP场景要求) | 严重超标(可能遭遇机械寻道/坏扇区重试) |
95th percentile | 3.55 | 应类似avg latency | 存在长尾延迟(5%请求>3.55ms) |
总延迟累积 | 299,449.80 | 无直接参考值 | 总延迟≈测试时长(299秒≈300秒),验证系统满载运行 |
三、MySQL服务器专项验证(实战演练)
3.1 测试环境准备
# 创建专用测试库
mysql -uroot -p -e "CREATE DATABASE sbtest;"
# 生成生产级测试数据
sysbench --threads=16 --time=600 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=密码 --mysql-db=sbtest --tables=8 --table-size=50000 oltp_read_write prepare
关键参数说明:
--table-size
:单表5万行(模拟小型数据库)--tables=8
:多表结构验证锁竞争(小型数据库标准)oltp_read_write
:测试模式:OLTP混合读写
3.2 读写测试
sysbench --threads=16 --time=30 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=密码 --mysql-db=sbtest --tables=8 --table-size=50000 oltp_read_write run
3.3 测试结果深度解析
SQL statistics:
queries performed:
read: 129626
write: 37036
other: 18518
total: 185180
transactions: 9259 (308.34 per sec.) #关键参数
queries: 185180 (6166.89 per sec.) #关键参数
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 30.0266s
total number of events: 9259
Latency (ms):
min: 12.06
avg: 51.87
max: 3342.50
95th percentile: 108.68 #关键参数
sum: 480247.49
Threads fairness:
events (avg/stddev): 578.6875/4.78
execution time (avg/stddev): 30.0155/0.01
性能水平:
- TPS 308.34:表示数据库每秒处理约 308 个事务,吞吐量中等,具体需结合硬件配置评估。
- 平均延迟 51.87ms:响应时间在合理范围,但 95% 请求 ≤ 108.68ms,最大延迟 3.3 秒,可能存在偶发性能问题(如锁竞争、I/O 瓶颈)。
通过本指南,您将能够:
- 全面掌握Sysbench的测试能力
- 精准定位服务器性能瓶颈
- 验证MySQL服务器承载能力
最终建议:在新服务器上线、配置变更、业务量增长30%时,都应执行全量压力测试。保存历史测试数据,形成性能趋势分析,为容量规划提供数据支撑。