什么是存储测试?类型 Concepts & 例子
什么是存储测试?
存储测试 是一种软件测试类型,用于验证被测软件应用程序是否将相关数据存储到适当的目录中,以及是否有足够的空间来防止因磁盘空间不足而导致的意外终止。它也被称为 存储性能测试.
这项技术属于该学科的非功能性范畴:与其他形式的 非功能性测试它没有说明某个功能是否能产生正确的答案,而是说明了随着数据量和 I/O 压力的增长,系统是否还能继续产生答案。
为什么要进行存储测试?
存储是大多数应用程序访问的最慢层,因此存储方面的弱点会反映到其他所有方面。以下四个原因表明,专门的存储测试周期是必要的。
- 存储速度慢意味着响应时间慢、查询运行时间长以及应用程序可用性低。
- 存储速度慢会增加服务器基础设施维护的负担。
- 在部署之前,找出系统的实际存储极限很有帮助。
- 了解硬件设备更换或升级时系统的反应很有帮助。
下图将存储测试置于该背景下——应用程序、文件系统和物理设备都位于同一路径上,路径上的任何延迟都会影响用户。
存储测试的类型
采用了三种方法,它们的主要区别在于工作负载与实际应用程序的相似程度。
- 应用测试: 在类似生产环境的条件下,使用示例查询进行应用程序测试。
- 应用模拟: 使用与目标应用程序行为类似的标准软件进行测试。
- 标杆: 使用标准基准测试软件进行测试,该软件可以生成合成的、可重复的工作负载。
第一种方法给出了最真实的结果,但可移植性最差;第三种方法给出的数据可以在不同设备和供应商之间进行比较,但对于应用程序本身的运行情况却鲜有说明。
通用测试 Concepts 参与存储测试
这三种类型分别对应着不同的活动,总结如下。
| 存储测试的类型 | 常见存储测试活动示例 |
| 应用测试 | 比较 OLTP 响应时间 比较批处理运行时间 比较持续流媒体速率 |
| 应用模拟 | 测试数据库的峰值存储 IOPS 测试数据流环境的峰值存储吞吐量 测试消息传递或其他单线程应用程序的存储延迟 |
| 标杆测试 | 测试数据损坏 |
存储测试的关键指标
存储结果以少量数字的形式呈现。单独解读其中任何一个数字都极易得出错误结论,因为它们之间存在相互影响的关系。
| 米制 | 它测量什么 | 在最关键的地方 |
| IOPS | 每秒完成的读写操作次数,与数据大小无关。 | 事务型数据库和小规模随机写入 |
| 延迟 | 从开始到完成一次 I/O 操作所需的时间 | 消息传递和单线程应用程序路径 |
| 生产能力 | 每秒传输的数据量,通常以 MB/s 为单位。 | 批量运行、备份和流式工作负载 |
| 队列深度 | 同时发出的待处理请求数量 | 任何必须反映真实并发性的运行 |
队列深度尤其值得关注。一次只发出一个请求虽然能准确计算出单次请求的延迟,但会人为地降低 IOPS 和吞吐量,这就是为什么设备在测试中看起来很慢,而在生产环境中却很快,反之亦然的原因。
如何执行存储测试
存储测试的可靠性取决于其运行条件。以下步骤可确保结果可重复。
- 步骤 1)明确目标。 确定此次运行的目的是验证数据库就绪情况、寻找吞吐量上限,还是比较两台设备。每个目标都对应不同的工作负载,混用不同的目标会产生无法参考的数据。
- 步骤 2)根据实际情况确定数据集的大小。 工作集小到足以放入缓存,这衡量的是缓存容量,而不是存储空间。数据量应与生产数据量相匹配,或者至少远大于缓存容量。
- 步骤 3)选择读/写混合模式。 在同一设备上,随机访问和顺序访问的行为截然不同,70/30 读写混合模式和只写突发模式也是如此。混合模式应取自生产监控数据,而非默认值。
- 步骤 4)设置队列深度和线程数。 这些参数控制到达设备的并发量,因此请将它们与每个结果一起记录下来——没有记录这些参数的数字是无法重现的。
- 步骤 5)清除缓存并进行预热。 在运行之间删除服务器和设备缓存,然后丢弃第一个时间间隔,以便比较稳定状态的数字而不是首次接触时的数字。
- 步骤 6)运行足够长的时间。 短时间运行会掩盖固态硬盘写入缓冲区耗尽后出现的写入悬崖现象。而长时间运行则会将其暴露出来。
- 步骤 7)监控整个堆栈。 捕获处理器利用率、内存和网络以及存储计数器,以免将其他地方的瓶颈误判为存储限制。
- 步骤 8)重复并比较。 多次运行相同的配置并保留日志;只有与存储的基线相比,才能看出不同构建版本之间的性能差异。
由于任何负载驱动测量都适用相同的规范,因此这些测量通常会一起计划。 性能测试 并且安排在发布候选版本冻结之前。
存储测试工具
工具分为两类,大多数团队都需要这两类工具。
- 合成I/O生成器。 实用程序,例如 FIOIometer 和 sysbench 会发出精确描述的工作负载——块大小、读/写混合、队列深度和持续时间都已声明,因此可以在另一台设备上完全重复运行。
- 应用层加载工具。 例如司机 JMeter 对应用程序本身进行测试,以便存储看到真实用户创建的相同访问模式,包括合成工具无法重现的查询计划和索引行为。
Opera测试系统计数器完善了整个系统概览。无论负载是由什么工具产生的,存储数据都必须与处理器、内存和网络计数器一起读取——多种存储测试技术,包括 基准测试 和 容量测试需要依靠这种全栈视图来正确解释结果。
执行存储测试时的错误
大部分无效存储结果 trac回到少数可避免的错误。
- 监控错误的服务器性能,因此这些数字描述的并非正在测试的机器。
- 未先清除服务器缓存就比较存储设备,这样衡量的是内存而不是磁盘。
- 测试期间忘记监控处理器利用率,这会将处理器瓶颈隐藏在存储性能下降的表象之下。
- 使用文件复制命令测试存储性能,这些命令是单线程的、缓存辅助的且不可重复的。

