View a markdown version of this page

PostgreSQL 版本 18 中的自适应 autovacuum 增强功能 - Amazon Aurora

PostgreSQL 版本 18 中的自适应 autovacuum 增强功能

从 RDS for PostgreSQL 版本 18 开始,Amazon RDS 增强了自适应 autovacuum 机制,以便在数据库实例接近事务 ID 回绕时动态扩展 autovacuum_max_workers。在早期的 PostgreSQL 版本中,autovacuum_max_workers 需要在重启后才能更改。PostgreSQL 18 将 autovacuum_max_workers 作为动态参数,允许 Amazon RDS 对其进行调整而无需重启。

PostgreSQL 18 还引入了一个新参数 autovacuum_worker_slots,该参数在服务器启动时,为 autovacuum 工作线程保留后端进程槽。此参数设置可以同时运行的 autovacuum 工作线程的数量上限,autovacuum_max_workers 不能超过此值。与 autovacuum_max_workers 不同的是,autovacuum_worker_slots 需要在重启后才能更改。有关更多信息,请参阅 PostgreSQL 文档中的 autovacuum_worker_slots

自适应 autovacuum 如何扩展工作线程

当 PostgreSQL 18 实例上的 MaximumUsedTransactionIDs CloudWatch 指标超过 10 亿时,Amazon RDS 将使用以下公式,将 autovacuum_max_workers 增加到 autovacuum_worker_slots 值,该公式也是 autovacuum_worker_slots 参数的默认公式:

LEAST(GREATEST({DBInstanceClassMemory/32185783296}, 16), 32)

对于中小型实例(最高 512 GiB 内存),自适应 autovacuum 可扩展到 16 个工作线程。对于更大的实例,工作线程的数量会随内存大小按比例扩展,最大值为 32。例如,db.m5.4xlarge 实例(64 GiB)的默认 autovacuum_max_workers 为 3。当 MaximumUsedTransactionIDs 超过 10 亿时,Amazon RDS 将其扩展到 16 个工作线程。

Amazon RDS 绝不会减少您已经配置的值。如果您配置的 autovacuum_max_workers 高于计算值,Amazon RDS 不会对其进行更改。

每个 autovacuum 工作线程最多使用的内存大小等于 autovacuum_work_mem 设置。当自适应 autovacuum 增加工作线程数量时,autovacuum 消耗的内存总量会按比例增加。例如,如果 autovacuum_work_mem 设置为 1 GB,则自适应 autovacuum 从 3 个工作线程扩展到 16 个工作线程,autovacuum 工作线程使用的最大内存将从 3 GB 增加到 16 GB。

警告

请确保工作线程进程和内存的组合等于要分配给 autovacuum 的总内存。

监控自适应 autovacuum 更改

当 Amazon RDS 修改 autovacuum_max_workers 或任何其他 autovacuum 参数时,它会为受影响的数据库实例生成事件。您可以在 AWS 管理控制台中或通过 Amazon RDS API 查看这些事件。有关 RDS 事件的更多信息,请参阅 Amazon RDS 事件类别和事件消息。要在发生这些事件时接收通知,请参阅订阅 Amazon RDS 事件通知

要查看当前的内存中 autovacuum 设置,请连接到数据库实例并运行以下命令:

SHOW autovacuum_max_workers;

参数组值不会更改。Amazon RDS 仅在数据库实例上的内存中修改这些参数。当 MaximumUsedTransactionIDs 降至低于阈值时,Amazon RDS 会将参数重置为参数组中的值并生成另一个事件。