配置自适应自动完全清理 (autovacuum)

本页面简要介绍了 AlloyDB for PostgreSQL 自适应自动完全清理 (autovacuum),并介绍了如何进行配置。

完全清理 (vacuum) 是重要的 PostgreSQL 数据库维护操作。它用于收回更新或删除的行所占用的存储空间,以避免表或索引膨胀。它还用于冻结事务 ID 以防止事务 ID 回卷,以及更新表统计信息。

如需详细了解完全清理 (vacuum),请参阅例行完全清理 (vacuum)

为了自动执行完全清理 (vacuum) 和集体更新表统计信息的过程,AlloyDB 支持自适应自动完全清理 (autovacuum)。自适应自动完全清理 (autovacuum) 可在工作负载发生变化自动调整 自动完全清理 (autovacuum) 工作负载、移除不活跃元组和更新表统计信息。

自动完全清理 (autovacuum) 可确保应用事务性能可靠且一致,并通过防止事务 ID 回卷来保持系统的高可用性。

默认情况下,AlloyDB 会启用自适应自动完全清理 (autovacuum)。您可以使用数据库标志对 AlloyDB 停用或修改自适应自动完全清理 (autovacuum)。

优势

自适应自动完全清理 (autovacuum) 提供以下优势:

  • 自动调整资源。AlloyDB 会根据工作负载的实时状态和可用资源自动调整 CPU、I/O、完全清理 (vacuum) 进程数量和用于完全清理 (vacuum) 进程的内存等资源,而不会影响系统性能。

  • 防止事务 ID 回卷。AlloyDB 会监控完全清理 (vacuum) 进度和事务 ID 消耗速度。必要时,AlloyDB 会通过完全清理 (vacuum) 数据库中的每个表来限制其事务 ID 消耗,从而防止事务 ID 回卷。

  • 定期完全清理 (vacuum) 表。AlloyDB 会根据不活跃元组数和需要扫描的页数触发自动完全清理 (autovacuum)。它会及时移除不活跃元组,以避免表或索引膨胀。

  • 自动检测阻碍因素。AlloyDB 会自动检测阻碍因素(例如长时间运行的事务、孤立的已准备事务、孤立的复制槽),并在 postgres 日志中显示类似于以下内容的警告消息:

    Found a backend process PROCESS_ID with a long running transaction whose transaction
    id age AGE is larger than or equal to the transaction age threshold AGE_THRESHOLD.
    

配置自适应自动完全清理 (autovacuum)

默认情况下,AlloyDB 会启用自适应自动完全清理 (autovacuum)。您可以通过将实例的 enable_google_adaptive_autovacuum 数据库标志设置为 off 来停用自适应自动完全清理 (autovacuum)。

如需详细了解如何设置数据库标志,请参阅配置实例的数据库标志

AlloyDB 支持多个与完全清理 (vacuum) 和自动完全清理 (autovacuum) 相关的标准 PostgreSQL 数据库标志,例如 vacuum_cost_delayautovacuum_vacuum_cost_delay。您无需在任何这些标志中设置值,即可让自适应自动完全清理 (autovacuum) 正常运行,因为自适应自动完全清理 (autovacuum) 会根据您的实际工作负载来调整和优化其行为。如果您在这些标志中设置了值,自适应自动完全清理 (autovacuum) 会调整其行为以考虑您的偏好设置。

如需查看与完全清理 (vacuum) 和自动完全清理 (autovacuum) 相关的受支持 PostgreSQL 数据库标志的完整列表,请参阅完全清理 (vacuum) 标志自动完全清理 (autovacuum) 标志