在 PostgreSQL 中优化和监控 VACUUM 操作并排查相关问题

本文档介绍了 PostgreSQL 数据库中 VACUUM 操作的基础知识。还介绍了用于维护数据库实例正常运行的数据库引擎的监控和调整机制。

PostgreSQL 使用基于快照的并发协议,可在修改数据时创建多个版本的数据行。这些数据行版本用于使用计算出的快照读取数据的可见版本,而无需获取数据行的读锁。PostgreSQL 会为每行数据维护事务 ID(已插入和已删除的事务 ID),并使用事务 ID 以及计算出的快照来确定该行的公开范围。随着数据由于旧版本数据而不断增长,扫描数据(表扫描或索引扫描)需要的时间会不断增加。为了优化扫描操作的响应时间并高效利用空间,您需要收回用于维护版本的版本和元数据(例如事务 ID)。

VACUUM 操作会收回已删除版本(垃圾回收)和事务 ID(冻结事务 ID)。VACUUM 对不同模式和具有不同的数据可用性的数据进行操作。冻结事务 ID 对于数据库系统的运行状况至关重要,因为一旦已使用的事务 ID 空间成为预留空间,系统会阻止写入者。

您配置的 autovacuum 作业会持续尝试收回交易 ID,但作业可能会失败。这种失败的原因可能是配置不足,或事务 ID 的创建速率过高,导致 autovacuum 作业赶不上工作负载的增速。本文档的目的是介绍如何使用 VACUUM 操作以及 VACUUM 操作各个方面的调节和监控机制。

概览

本文档包括以下内容:

  • 冻结事务 ID。
  • 监控事务 ID。
  • 收回存储空间。
  • 配置自动 Cloud Monitoring 提醒。

要阅读完整的白皮书,请点击以下按钮:

下载 PDF