测试结果为什么会失真
存储测试失真的根源是测试环境与生产环境的差异被忽略。第一类是缓存效应:设备、控制器、主机页缓存与文件系统缓存层层叠加,反复访问同一小块数据时全部命中缓存,测出的是缓存速度而非介质速度;应对方式是使用远大于缓存的数据集并保持稳定的访问分布。第二类是条件不完整:不说明 IO 大小、读写比例、队列深度与时延分布,结果无法比较,也无法映射到业务。第三类是规模差异:单盘叠加推算阵列,忽略了控制器与后端共享资源的争抢。第四类是状态差异:新盘空盘与长期运行后的稳态表现完全不同,稳态才是生产要面对的状态。
常见失真与对策
| 失真类型 | 现象 | 对策 |
|---|---|---|
| 缓存效应 | 结果远高于介质能力 | 数据集远大于缓存,保持访问分布稳定 |
| 条件缺失 | 数字无法比较 | 记录 IO 大小、读写比、队列深度与时延分布 |
| 规模外推 | 单盘叠加结果偏乐观 | 在目标配置与真实拓扑上测试 |
| 状态差异 | 空盘快、稳态慢 | 预填充至稳态再采集数据 |
| 负载单一 | 单项达标混跑不合格 | 按业务组合设置混合负载 |
基本信息
| 常用工具 | 主机侧通用基准工具与数据库自带压测工具 |
|---|---|
| 必录条件 | IO 大小、读写比例、随机比例、并发、数据集大小、测试时长 |
| 关注指标 | 稳态吞吐、时延分布(平均值与高位分位) |
| 结果用法 | 用于方案对比与容量推算,不用于对外承诺绝对性能 |
| 验收方式 | 按业务真实负载设计用例,双方确认测试脚本 |
典型使用场景
- 采购验收:按约定脚本与负载模式测试,避免两边对同一指标有不同理解
- 方案对比:多套候选配置使用完全相同的测试条件
- 故障排查:用基准测试复现问题,确认是否为配置或硬件异常
- 容量推算:把单位负载的实测消耗换算为整体需求
- 上线前验证:用业务镜像做一次端到端压测,确认整体链路达标
报告结果时应附测试条件与偶发环境因素:批量任务、备份、重建甚至同机其他业务都会影响数据。把这些因素记录清楚,比追求一个漂亮的数字更有价值。
不要用合成测试替代业务验证:合成负载可以量化设备能力,但业务真实行为(例如事务提交模式、日志刷盘频率)无法完全模拟,最终验收仍应用真实应用压测。