什么是容量测试?通过示例学习

⚡ 智能摘要

容量测试是指用海量数据测试应用程序,以观察随着数据库增长,存储、查询和响应时间的性能表现。它也被称为洪水测试,其扩展方式是增加数据量,而不是增加用户数量。

  • 💾 核心定义: 数据量增加,而用户负载保持正常。
  • 🔍 初步核查: 大数据集下的数据丢失、静默覆盖、存储准确性和响应时间。
  • 📈 劣化点: 该测试旨在确定稳定性和性能开始下降的体积。
  • 未进行负载测试: 卷统计的是行数和文件大小;负载统计的是并发用户数。两者发现的缺陷不同。
  • 🧪 数据真实性: 生成的数据必须符合键值和关系完整性要求,这是测试中最难的部分。
  • ???? 商业案例: 发布前发现的产能限制成本仅为生产过程中发现的相同产能限制成本的一小部分。

什么是容量测试

什么是容量测试?

容量测试 是一种软件测试,其中软件要接受大量数据。它也被称为 洪水测试。 通过增加数据库中的数据量来进行容量测试来分析系统性能。

借助容量测试,可以研究暴露于大量数据时对响应时间和系统行为的影响。

例如,一项音乐流媒体服务可能会使用包含 50 万首歌曲的曲库进行测试。 tracks 和一个包含数十亿行的监听历史表,以查看搜索和推荐查询是否仍能在可接受的时间内返回。

请注意以下区别: 测试量增加 数据量 系统保持稳定。增加 并发用户数 负载测试是一种不同的测试,其目标也不同。

容量测试的好处

  • 及早发现产能问题可以避免在生产过程中修复这些问题时付出更高的成本。
  • 它有助于更​​快地启动可扩展性计划
  • 尽早发现瓶颈
  • 它确保您的系统现在能够实际使用

为什么要进行容量测试?

进行容量测试的目的是

  • 随着数据库中数据量的增加,检查系统性能
  • 识别出数据集增大后可能出现的问题。
  • 找出系统稳定性下降的点
  • 容量测试将有助于确定系统或应用程序的容量——正常容量和大容量

如何进行容量测试

在容量测试中,需要测试以下内容

  • 测试是否有数据丢失
  • 检查系统的响应时间
  • 检查数据是否存储正确
  • 验证数据是否在未经任何通知的情况下被覆盖
  • 检查当达到音量限制时,是否实际显示了警告和错误消息。
  • 检查大量数据是否影响处理速度
  • 确认系统拥有该卷所需的内存和存储资源。
  • 确认容量测试覆盖整个系统,而不是单个组件。
  • 如果数据量超过规定值,是否存在风险
  • 确定是否存在任何保证,确保数据量不会超过规定的最大值。

高容量测试的最佳实践

以下几种实践方法与负载测试相同,因为两者通常在相同的环境下运行。而与卷相关的实践方法则与数据集本身有关:

  • 停止所有服务器并检查所有日志
  • 负载测试前手动执行应用场景
  • 为了获得最有用的结果,错开用户数量
  • 为了克服许可证限制,平衡思考时间
  • 对新建筑要谨慎
  • 建立基线后,分析用例以进行改进
  • 如果出现性能瓶颈,则不可避免地会重复进行容量测试的特定部分

容量测试与负载测试

容量测试 负载测试
  • 容量测试用于检查当数据库存储大量数据时应用程序的运行情况。
  • 在负载测试中,应用程序会承受一定程度的负载,以分析应用程序的行为
  • 容量测试用于验证系统在给定数据量下是否仍能正确响应。它通常会增加文件和表的大小。
  • 负载测试会在并发用户负载增加时检查性能。它通常会增加并发请求的数量。

容量测试中的挑战

  • 记忆碎片难以产生
  • 动态生成密钥
  • 相关的 Integrity 生成的数据

此测试与其他性能测试的比较

性能测试是一系列测试的总称,这些测试在施加的载荷形式上有所不同,因此很容易混淆。

测试类型 增加的是什么 它解答的问题
负载测试 并发用户数达到预期峰值 在正常高峰交通流量下,它能达到目标吗?
容量测试 数据库中存储的数据 随着数据集的增长,它能否应对?
压力测试 负载超过容量,直至发生故障 它在哪里断裂,又是如何断裂的?
尖峰测试 加载速度极快,速度极快 它能否在受到冲击后存活并恢复?
耐力测试 正常负荷下的持续时间 性能会随着时间推移而下降吗?
浸泡测试 时长,观看资源 是否存在内存泄漏或句柄泄漏?
稳定性测试 各种条件 随着环境变化,它还能保持可靠性吗?

这里最重要的区别在于: 容量测试衡量数据规模,负载测试衡量用户规模。 一份报表,如果处理一万行数据需要两秒钟,处理一千万行数据需要两分钟,那么这是数据量问题,而不是负载问题,再多的服务器容量也无法解决这个问题。

如何生成容量测试的测试数据

挑战部分指出,生成真实数据是容量测试的难点所在。实践中采用了四种方法,每种方法都存在利弊权衡。

途径 现实主义 主要缺点
生产数据副本 最高 隐私和合规风险
蒙版制作副本 掩码可能会破坏参照完整性
合成生成 分布情况可能与实际情况不符。
重播的生产流量 需要采集基础设施

无论你选择哪种方法,都必须满足三个条件,否则测试就无法衡量任何有用的信息。

  • 参照完整性。 每个外键都必须解析。一百万个孤立行会给存储引擎带来压力,但不会给应用程序实际使用的连接路径带来压力。
  • 实际基数。 如果生产表包含两百个客户的一千万行数据,那么生成包含一千万个客户的一千万行数据会产生完全不同的查询计划。
  • 实际分布情况。 真实数据存在偏差。均匀随机数据会掩盖导致生产事故的热分区和索引争用问题。

关于隐私的实用警告。 将生产环境数据复制到测试环境是测试中数据泄露最常见的原因。应在数据离开生产环境之前屏蔽个人字段,而不是之后。

常见问题

容量测试在用户负载保持正常的情况下增加系统中的数据量。负载测试在数据集保持正常的情况下增加并发用户数。它们暴露出的瓶颈不同,因此两者都需要进行。

从计划容量范围结束时的预计数据量(通常为两到三年的增长)开始,然后以该数值和两倍的数值进行测试,以找出性能下降的起始点。

索引缺失或效率低下、查询无法线性扩展、存储空间耗尽、字段被静默截断以及批处理作业的运行时间超过了可用窗口。

AI 模型学习生产数据的统计分布和关系,然后生成合成记录,这些记录保留了这些属性,但不会泄露任何真实的客户记录。

是的,在某种程度上是这样。根据测量得到的退化曲线拟合的模型可以推断出失效点,但该预测结果必须通过实际运行来验证,才能用于制定容量决策。

总结一下这篇文章: