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

时间:2015-09-02 14:55:01

标签: performance postgresql amazon-web-services vacuum

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

昨天我们观察到性能严重下降,结果发现过去5天我们有5个VACUUM ANALYZE进程停滞不前。在相同的时间段内,磁盘利用率增加了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?

2 个答案:

答案 0 :(得分:10)

Postgres 9.6 + 为这个用例提供了两个救生员:

  • 允许您查看“真空进度”的新系统视图(pg_stat_progress_vacuum
  • VACUUM现在能够做部分真空吸尘器,这对大型桌子非常有用。由于并发(用户)查询并最终减速或被阻止和超时,真空吸尘器经常卡住。在Postgres 9.6+中,真空可用于例如清空大表的80%,然后在后续运行中执行表的剩余20%。在以前的版本中这是不可能的。

答案 1 :(得分:4)

  

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

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

  

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

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

  

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

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

如您所见,可以对管理/监控真空进行大量改进。但是,我们缺乏有时间,意愿和知识所需的人。每个人都希望添加新的闪亮功能。

  

我是否还需要定期运行ANALYZE?

没有

  

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

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