适用于虚拟机上的 AlloyDB Omni 的性能测试方法

选择文档版本:

本文档介绍有关对虚拟机上的 AlloyDB Omni 运行性能测试的建议。本文档假定您熟悉 PostgreSQL。

在进行性能基准测试时,请在开始之前确定您期望通过测试了解哪些内容。例如:

  • 系统可以实现的最大吞吐量是多少?
  • 特定查询或工作负载需要多长时间?
  • 随着数据量的增加,性能会如何变化?
  • 两种不同系统的性能对比如何?
  • 列式引擎可将查询性能的响应时间缩短多少?
  • 在需要考虑升级到功能更强大的机器之前,数据库可以处理多大的负载?

了解性能研究的目标有助于确定您要运行哪些基准测试、需要什么环境以及需要收集哪些指标。

可重复性

如需根据性能测试得出可靠结论,测试结果必须具有可重复性。如果测试结果波动较大,那么将难以评估您对应用或系统配置所进行的更改的影响。多次运行测试或延长测试运行时间以提供更多数据可以帮助减小结果波动幅度。

理想情况下,性能测试应在与其他系统隔离的系统上运行。如果运行环境中存在可能影响应用性能的外部系统,那么可能会导致得出错误结论。在多租户云环境中运行时通常无法实现完全隔离,因此您可以预计到测试结果会出现更大的波动

可重复性部分在于确保测试工作负载在多次运行之间保持不变。测试输入中的某些随机性是可以接受的,只要随机性不会导致应用行为发生显著变化即可。如果随机生成的客户端输入会在每次运行时改变读取和写入内容的组合,那么性能将出现大幅波动。

数据库大小、缓存和 I/O 模式

确保您用于测试的数据量能代表您的应用。当您有数百 GB 或 TB 的数据时,使用少量数据运行测试可能无法真实反映应用的性能。数据集的大小也会影响查询优化器做出的选择。针对小型测试表的查询可能会使用表扫描,这种方法在规模较大时性能较差,并且您无法在这种配置下识别缺失的索引。

应尽量复现应用的 I/O 模式。读取与写入的比率对应用的性能分析非常重要。

基准测试时长

在复杂的系统中,系统执行时会维护大量状态信息:建立数据库连接、填充缓存、生成进程和线程。如果工作负载的运行时过短,则在性能测试开始时,这些组件的初始化可能会占用系统资源,并对测量的性能结果产生不利影响。

我们建议您将性能测试至少运行 20 分钟,以尽量减少系统预热的影响。应在启动后处于稳定状态期间测量性能,并运行足够长的时间来确保涵盖数据库操作的所有方面。例如,数据库检查点是数据库系统的重要功能,可能会对性能产生重大影响。如果基准测试运行时间较短,在达到检查点间隔之前便已完成,那么会掩盖应用行为中的重要因素。

有条理的测试

在对性能进行调优时,请一次只更改一个变量。如果您在运行之间更改多个变量,则无法确定哪个变量改进了性能。事实上,多个更改可能会相互抵消,因此您不会观察到适当更改带来的好处。如果数据库服务器利用率过高,请尝试改用配备更多 vCPU 的机器,同时保持负载不变。如果数据库服务器利用率过低,请尝试增加负载,同时保持 CPU 配置不变。

网络拓扑和延迟时间

系统的网络拓扑可能会影响性能测试结果。不同可用区之间的延迟时间会有所不同。进行性能测试时,确保客户端和数据库集群处于同一可用区能够最大限度地缩短网络延迟时间并实现最佳性能,尤其是对于具有高吞吐量、短事务的应用,因为网络延迟时间可能在整体事务响应时间占据很大比重。

比较两个不同系统的性能时,请确保两个系统的网络拓扑相同。请注意,网络延迟时间的波动无法完全消除,即使在同一可用区内,由于底层网络拓扑的不同,延迟时间也可能存在差异。

在部署应用时,您可能需要考虑典型的高流量 Web 应用,以便更好地了解跨可用区延迟时间的影响。应用有一个负载均衡器,用于将请求发送到部署在多个可用区中的多个 Web 服务器,以实现高可用性。由于跨可用区延迟时间存在差异,延迟时间可能会因处理请求的 Web 服务器而异。

下图展示了使用 AlloyDB Omni 的 Web 应用的典型架构。客户端请求由负载均衡器处理,它会将每个请求转发到众多 Web 服务器中的某一个。Web 服务器全部连接到 AlloyDB Omni。某些服务器位于与 AlloyDB Omni 运行位置不同的可用区中,在发出数据库请求时会遇到更长的延迟时间。

显示典型 Web 应用架构的流程图。
图 1:典型 Web 应用架构的图示。我们预计可用区 B 中的 Web 服务器向数据库发出请求时的延迟时间会更短,因为它们与 AlloyDB Omni 数据库位于同一可用区中。

资源监控

如需优化数据库系统的性能,您需要监控数据库系统和使用数据库系统的客户端系统的资源使用情况。通过监控这两个系统,您可以确保客户端系统提供足够的工作负载,以便在数据库系统中获得有意义的测量结果。监控您所测试的系统的资源利用率至关重要。监控您用于驱动工作负载的客户端系统的资源利用率同样重要。例如,如果您想确定数据库系统在用尽 CPU 资源之前可以支持的客户端数量上限,则需要足够的客户端系统来生成用尽数据库系统中所有 CPU 资源所需的工作负载。如果生成负载的客户端机器本身没有足够的 CPU,您将无法充分驱动数据库系统。

可伸缩性测试

可伸缩性测试是性能测试的另一个方面。可伸缩性是指随着工作负载的某个特征发生变化,性能指标会如何变化。可伸缩性研究的一些示例包括:

  • 并发请求数量增加会如何改变吞吐量和响应时间?
  • 数据库大小增加会如何改变吞吐量和响应时间?

可伸缩性测试需要多次运行工作负载,在每次运行中会改变单一维度,并收集和绘制一个或多个指标。这类测试可用于确定系统中存在的瓶颈、在给定特定配置的情况下系统可以处理的负载量、系统可以支持的最大负载,以及当负载超过这些水平时系统的行为。

机器大小注意事项

AlloyDB Omni 向 Postgres 引入了许多新功能,以提高数据库的可靠性和可用性。实现此目标所需的监控会使用运行 AlloyDB Omni 的机器上的资源。在大小很小的机器上,内存和 CPU 资源从一开始就非常有限,因此对于基准测试,我们建议使用至少具备 4 个 vCPU 的机器大小。