如何处理卡住的 PostgreSQL 9.3 VACUUM ANALYZE?

How to deal with a stuck PostgreSQL 9.3 VACUUM ANALYZE?

我们运行AWS RDS平台上的PostgreSQL 9.3。每天凌晨 1 点,我们都在 运行 处理全球 VACUUM ANALYZE 工作。

昨天我们观察到性能严重下降,事实证明我们在过去 5 天内有 5 VACUUM ANALYZE 个进程卡住了。在同一时间段内,磁盘利用率上升了 45 GB。

我用 pg_terminate_backend 杀死了它,但这并没有太大影响。这些进程看起来已经死了,但性能仍然严重下降。由于我们使用的是 AWS RDS,因此我们执行了带有故障转移的重启,并且性能立即得到了显着提升。

今天早上查看发现VACUUM ANALYZE又卡了5个小时。我杀了它,但我怀疑它还在某处。

经过进一步调查,我确认 auto_vacuum 已正确启用,这意味着我们不需要 运行 手动 VACUUM 但我们可能需要 运行 ANALYZE 在部分或所有表格上。

在我的研究中,我发现了这篇文章:http://rhaas.blogspot.com/2011/03/troubleshooting-stuck-vacuums.html and http://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT

最后,我有以下问题:

  1. 在启用 auto_vacuum 的情况下不 运行 手动 VACUUM 是否正确?
  2. 如何监控 auto_vacuum 的进度和性能?我怎么知道它没有卡在手动 VACUUM 的同一个地方?
  3. 我还需要定期 运行 分析吗?
  4. 有没有办法启用自动分析,类似于auto_vacuum?

Is it correct to not run manual VACUUM with auto_vacuum enabled ?

您通常不需要任何类型的手动吸尘器。如果 autovacuum 没有跟上,请使其 运行 更频繁、更快。请参阅 autovacuum 文档。

How can I monitor the progress and performance of auto_vacuum ?

注意 table 膨胀的增长。不幸的是,没有 pg_stat_autovacuum 或类似的。您可以看到 autovacuum 在 pg_stat_activity 中工作,但只是即时到即时。详细分析需要在启用 autovacuum 日志记录的情况下搜索日志文件。

How do I know it is not stuck in the same place as the manual VACUUM ?

勾选pg_stat_activity。你不知道它在同一个地方,你甚至不能真正判断它是否在进步,但你可以看到它是否 运行ning。

如您所见,admin/monitoring 真空度还有很多改进空间。不过,我们缺少有时间、意愿和知识的人来做这件事。每个人都想添加新的闪亮功能。

Do I still need run ANALYZE on a regular basis ?

没有

Is there a way to enable automatic ANALYZE, similar to auto_vacuum ?

Autovacuum 运行在需要时进行分析(或更确切地说是 VACUUM ANALYZE)。

Postgres 9.6+ 对于这个用例有两个救命稻草:

  • 一个新的系统视图 (pg_stat_progress_vacuum),可以让您看到 Vacuum Progress
  • VACUUM 现在可以进行部分吸尘,这对于大型 table 来说非常有用。 Vacuum 经常因为并发(用户)查询而卡住,并最终变慢或被阻塞和超时。在 Postgres 9.6+ 中,Vacuum can for e.g.清理一个大 table 的 80%,并在随后的 运行 中完成 table 的剩余 20%。这在以前的版本中是不可能的。