我们在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.html和http://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT。
最后,我有以下问题:
答案 0 :(得分:10)
Postgres 9.6 + 为这个用例提供了两个救生员:
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)。