如何处理陷入困境的PostgreSQL 9.3 VACUUM ANALYZE?

Ole*_*lin 2 postgresql performance vacuum amazon-web-services

我们在AWS RDS平台上运行PostgreSQL 9.3.每天凌晨1点我们都在做全球VACUUM ANALYZE工作.

昨天我们观察到性能严重下降,结果发现VACUUM ANALYZE过去5天我们有5个进程停滞不前.在相同的时间段内,磁盘利用率增加了45千兆字节.

我杀了它pg_terminate_backend但没有太大的影响.这些过程看起来已经死亡,但性能仍然严重下降.由于我们使用的是AWS RDS,我们已经执行了重启,故障转移和性能立即得到了显着改善.

今天早上我查了一下,发现VACUUM ANALYZE再次卡住了5个小时.我杀了它,但我怀疑它还在那里.

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

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

最后,我有以下问题:

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

Rob*_*kan 10

Postgres 9.6+为这个用例有两个救生员:

  • 一个新的系统视图(pg_stat_progress_vacuum),允许您查看真空进度
  • VACUUM现在能够做部分真空吸尘器,非常适合大型桌子.由于并发(用户)查询并最终减速或被阻止和超时,真空吸尘器经常卡住.在Postgres 9.6+中,真空可用于例如80%大型工作台的真空,并20%在随后的运行中完成剩余的工作台.在以前的版本中这是不可能的.

  • 感谢您分享这一点. (2认同)

Cra*_*ger 5

在启用 auto_vacuum 的情况下不运行手动 VACUUM 是否正确?

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

如何监控 auto_vacuum 的进度和性能?

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

我怎么知道它没有和手动 VACUUM 卡在同一个地方?

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

如您所见,可以对真空的管理/监控进行大量改进。然而,我们缺乏有时间、意愿和知识的人来做这件事。每个人都想添加新的闪亮功能。

我还需要定期运行 ANALYZE 吗?

不。

有没有办法启用自动 ANALYZE,类似于 auto_vacuum ?

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