3

我们在 AWS RDS 平台上运行 PostgreSQL 9.3。每天凌晨 1 点,我们一直在执行一项全球性VACUUM ANALYZE工作。

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

我用它杀死了它,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

最后,我有以下问题:

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

2 回答 2

13

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

  • 一个新的系统视图 ( pg_stat_progress_vacuum ),允许您查看 Vacuum 进度
  • VACUUM现在可以做部分真空吸尘器,这对于大桌子非常有用。由于并发(用户)查询,真空吸尘器经常卡住,最终速度变慢或被阻塞和超时。在 Postgres 9.6+ 中,Vacuum 可以例如对大型表进行真空处理,并在后续运行中80%执行剩余的表。20%这在以前的版本中是不可能的。
于 2016-11-07T03:53:54.097 回答
5

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

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

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

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

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

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

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

我还需要定期运行 ANALYZE 吗?

不。

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

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

于 2015-09-03T00:12:58.987 回答