View a markdown version of this page

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 数据库中

在某些情况下,rdsadmin 或 template0 数据库可能会被标识为具有最早事务 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.

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

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

当积极真空已经在运行时

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 以防止事务失败。