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 exceedingdvb_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
ortemplate0
, reach out to support if the reported blocker is inrdsadmin
ortemplate0
.验证列出的拦截器是否不是来自这两个数据库中的任何一个。如果据报告
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
以防止事务失败。