在 Azure Database for PostgreSQL 灵活服务器中执行智能优化

适用于: Azure Database for PostgreSQL - 灵活服务器

Azure Database for PostgreSQL 灵活服务器具有智能优化功能,旨在自动增强性能并帮助防止出现问题。 智能优化会持续监视 Azure Database for PostgreSQL 灵活服务器数据库的状态,并动态地让数据库适应工作负荷。

此功能包含两项自动优化功能:

  • 自动清理优化:此功能会跟踪膨胀率并相应地调整自动清理设置。 它会同时考虑当前和预测的资源使用情况,预防工作负载中断。
  • 写入优化:此功能会持续监视写入操作的次数和模式,并修改影响写入性能的参数。 这些调整可增强系统性能和可靠性,从而主动避免潜在的复杂情况。

可以使用 Azure 门户Azure CLI 启用智能优化。

为什么要进行智能优化?

Autovacuum 过程是维护 Azure Database for PostgreSQL 灵活服务器数据库的运行状况和性能的关键部分。 它有助于回收“不活动”行占用的存储空间,释放空间,使数据库顺畅运行。

同样重要的是对数据库中的写入操作的优化。 此任务通常由数据库管理员承担。 持续监视数据库和微调写入操作并非易事,且很耗时。 处理多个数据库时,此任务会变得越来越复杂。

此时,智能优化就可以派上用场。 可以使用智能优化来自动监视和优化数据库,而不必手动监视和优化。 这样的话,你可以专注于其他重要任务。

智能优化中的自动清理优化功能可监视膨胀率,并根据需要调整设置,以优化资源利用率。 它会主动管理数据库的“清理”过程,并缓解过时数据可能带来的性能问题。

写入优化功能会观察写入操作的数量和事务模式。 智能调整 bgwriter_delaycheckpoint_completion_targetmax_wal_sizemin_wal_size 等多项参数。 通过此操作,它可以增强系统性能和可靠性,甚至在高写入负载的情况下也是如此。

使用智能优化时,可以依靠 Azure Database for PostgreSQL 灵活服务器来节省宝贵的时间和资源,以保持数据库的最佳性能。

智能优化的工作原理是什么样的?

智能优化功能会持续进行监视和分析,让你不仅可以了解工作负载的特征,还可以跟踪 CPU 或 IOPS 等当前负载和资源使用情况。 它不会干扰应用程序工作负载的正常操作。

此进程通过识别实例上的当前膨胀率、写入性能和检查点,让数据库动态调整工作负载。 借助这些见解,智能优化可以部署优化操作,以增强工作负载的性能并避免潜在的缺陷。

自动清理优化

智能优化可调整与自动清理相关的五个参数,它们分别是 autovacuum_vacuum_scale_factorautovacuum_cost_limitautovacuum_naptimeautovacuum_vacuum_thresholdautovacuum_vacuum_cost_delay。 这些参数负责调节组件,例如:

  • 启动 VACUUM 进程的表的部分。
  • 基于成本的清理延迟限制。
  • 自动清理运行之间的暂停间隔。
  • 启动 VACUUM 进程所需的更新元组或死元组的最小计数。
  • 清理轮次之间的暂停持续时间。

重要

智能优化会在服务器级别(而不是单个表级别)修改与自动清理相关的参数。 此外,如果关闭自动清理,则智能优化将无法正常运行。 若要运行智能优化来优化此进程,则必须启用自动清理功能。

虽然自动清理守护程序会触发两个操作(VACUUMANALYZE),智能优化只会微调 VACUUM 进程。 此功能当前不会调整 ANALYZE 过程,后者会收集有关表内容的统计信息,以帮助 Azure Database for PostgreSQL 灵活服务器查询规划器选择最合适的查询执行计划。

智能优化包含衡量 CPU 和 IOPS 等资源利用率的保护措施。 当实例负载过重时,它不会增加自动清理活动。 这样,智能优化既能确保清理操作有效,也不会影响系统的整体性能。

当智能优化功能在优化自动清理时,它会利用活动和不活动的元组的统计信息来考虑服务器的平均膨胀率。 为了降低膨胀率,智能优化可能会减少比例因子或休眠时间等参数。 它可能会更快地触发 VACUUM 进程,并在必要时减少轮次之间的延迟。

另一方面,如果膨胀率处于很低的水平且自动清理进程过于激进,则智能优化可能会增加延迟、比例因子和休眠时间等参数。 这种平衡可最大程度地减少膨胀,并帮助确保自动清理进程高效地使用资源。

写入优化

智能优化功能会调整与写入优化相关的四个参数,分别是 bgwriter_delaycheckpoint_completion_targetmax_wal_sizemin_wal_size

参数 bgwriter_delay 负责确定唤醒后台写入进程以清理“脏”缓冲区(即新建或修改过的缓冲区)的频率。 后台编写器进程是 Azure Database for PostgreSQL 灵活服务器中处理写入操作的三个进程之一。 另外两个是检查点进程和后端写入(标准客户端进程,例如应用程序连接)。

后台写入进程的主要作用是减轻主检查点进程的负载,以及后端写入的压力。 bgwriter_delay 参数控制后台写入轮次的频率。 通过调整此参数,还可以优化数据操作语言 (DML) 查询的性能。

checkpoint_completion_target 参数是 Azure Database for PostgreSQL 灵活服务器支持的第二个写入机制的一部分,特别是检查点进程。 检查点按 checkpoint_timeout 定义的固定间隔发生(除非超出配置的空间时强制发生)。 为了避免页面写入激增而导致输入/输出系统过载,在检查点期间写入脏的缓冲区会分散在一段时间内进行。 checkpoint_completion_target 参数控制此持续时间的方式是,使用 checkpoint_timeout 将持续时间指定为检查点间隔的一部分。

checkpoint_completion_target 的默认值为 0.9(从 PostgreSQL 14 起)。 此值通常效果最佳,因为它在最长时段内分散 I/O 负载。 在极少数情况下,检查点可能无法及时完成,因为所需的预写日志记录 (WAL) 段的数量出现意外波动。 对性能的潜在影响是 checkpoint_completion_target 成为智能优化的目标指标的原因。

限制和已知问题

  • 智能优化只会在特定的范围内进行优化。 此功能可能不会进行任何更改。
  • 智能优化不会调整 ANALYZE 设置。
  • 目前,拥有 4 个或以上 vCore 的“常规用途”和“内存优化”服务器计算层支持自动清理优化。 不支持可突发服务器计算层。

后续步骤