如何处理卡住的 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。
最后,我有以下问题:
- 在启用 auto_vacuum 的情况下不 运行 手动 VACUUM 是否正确?
- 如何监控 auto_vacuum 的进度和性能?我怎么知道它没有卡在手动 VACUUM 的同一个地方?
- 我还需要定期 运行 分析吗?
- 有没有办法启用自动分析,类似于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%
。这在以前的版本中是不可能的。
我们运行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。
最后,我有以下问题:
- 在启用 auto_vacuum 的情况下不 运行 手动 VACUUM 是否正确?
- 如何监控 auto_vacuum 的进度和性能?我怎么知道它没有卡在手动 VACUUM 的同一个地方?
- 我还需要定期 运行 分析吗?
- 有没有办法启用自动分析,类似于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%
。这在以前的版本中是不可能的。