RDS for PostgreSQL 中的通知消息说明 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

RDS for PostgreSQL 中的通知消息说明

postgres_get_av_diag() 函数提供以下通知消息:

当龄期尚未达到监控阈值时

默认情况下,postgres_get_av_diag() 识别拦截器的监控阈值为 5 亿个事务。如果 postgres_get_av_diag() 生成以下通知,则表示事务龄期尚未达到此阈值。

NOTICE: postgres_get_av_diag() checks for blockers that prevent aggressive vacuums only, it does so only after exceeding dvb_threshold which is 500,000,000 and age of this PostgreSQL cluster is currently at 2.
未连接到具有最早事务 ID 龄期的数据库

当连接到具有最早事务 ID 龄期的数据库时,postgres_get_av_diag() 函数可提供最准确的输出。postgres_get_av_diag() 报告的具有最早事务 ID 龄期的数据库将不同于您的案例中的“my_database”。如果您未连接到正确的数据库,则会生成以下通知:

NOTICE: You are not connected to the database with the age of oldest transaction ID. Connect to my_database database and run postgres_get_av_diag() for accurate reporting.

出于以下原因,连接到具有最早事务龄期的数据库非常重要:

  • 识别临时表拦截器:由于临时表的元数据特定于每个数据库,因此它们通常位于在其中创建临时表的数据库中。但是,如果临时表恰好是最重要的拦截器,并且位于具有最早事务的数据库中,则可能会产生误导。连接到正确的数据库可确保准确识别临时表拦截器。

  • 诊断缓慢真空:索引元数据和表计数信息是特定于数据库的,是诊断缓慢真空问题所必需的。

按龄期计算具有最早事务的数据库位于 rdsadmin 或 template0 数据库中

在某些情况下,rdsadmintemplate0 数据库可能会被标识为具有最早事务 ID 龄期的数据库。如果发生这种情况,postgres_get_av_diag() 将发出以下通知:

NOTICE: The database with the age of oldest transaction ID is rdsadmin or template0, reach out to support if the reported blocker is in rdsadmin or template0.

验证列出的拦截器是否不是来自这两个数据库中的任何一个。如果据报告 rdsadmintemplate0 中存在拦截器,请联系支持部门,因为这些数据库对用户不可访问,需要干预。

rdsadmintemplate0 数据库包含最重要拦截器的可能性极小。

当积极真空已经在运行时

postgres_get_av_diag() 函数旨在报告何时正在运行积极真空进程,但它仅在真空处于活动状态至少 1 分钟后触发此输出。这种有意的延迟有助于减少误报的可能性。通过等待,该函数可确保仅报告有效、重要的真空,从而可更准确、更可靠地监控真空活动。

postgres_get_av_diag() 函数在检测到一个或多个正在进行的积极真空时会生成以下通知。

NOTICE: Your database is currently running aggressive vacuum to prevent wraparound, monitor autovacuum performance.

如通知中所述,请继续监控真空的性能。有关积极真空的更多信息,请参阅正在运行积极真空(以防止重叠)

当自动真空关闭时

如果数据库实例上禁用了自动真空,则 postgres_get_av_diag() 函数会生成以下通知:

NOTICE: Autovacuum is OFF, we strongly recommend to enable it, no restart is necessary.

Autovacuum 是 RDS for PostgreSQL 数据库实例的一项关键功能,可确保数据库顺畅运行。它会自动删除旧的行版本,回收存储空间,并防止表膨胀,从而帮助保持表和索引的高效性,以实现最佳性能。此外,它还可以防止发生事务 ID 重叠,这可能会停止 Amazon RDS 实例上的事务。禁用自动真空会导致数据库性能和稳定性的长期下降。建议您始终将其保持开启状态。有关更多信息,请参阅 Understanding autovacuum in RDS for PostgreSQL environments

注意

关闭自动真空并不会阻止积极真空。一旦您的表达到 autovacuum_freeze_max_age 阈值,仍会发生这种情况。

剩余的事务数严重不足

postgres_get_av_diag() 函数会在即将发生重叠真空时生成以下通知。当您的 Amazon RDS 实例距离可能拒绝新事务还有 1 亿个事务时,将发出此通知。

WARNING: Number of transactions remaining is critically low, resolve issues with autovacuum or perform manual VACUUM FREEZE before your instance stops accepting transactions.

需要立即采取行动以免发生数据库停机。您应该密切监控真空操作,并考虑在受影响的数据库上手动启动 VACUUM FREEZE 以防止事务失败。