我有几个大表需要几天时间才能自动清理,有时会导致性能不佳,直到清理完成。我看到的大多数建议都提到VACUUM
在下班时间做手册,这样 autovacuumVACUUM
的工作量就会减少,但是如果 autovacuum 需要几天才能完成,有什么办法可以挤进手册VACUUM
(给定 24 小时高峰期)活动周期)?
我假设手册VACUUM
仍然需要几天才能完成?还是我的假设不正确?
我有几个大表需要几天时间才能自动清理,有时会导致性能不佳,直到清理完成。我看到的大多数建议都提到VACUUM
在下班时间做手册,这样 autovacuumVACUUM
的工作量就会减少,但是如果 autovacuum 需要几天才能完成,有什么办法可以挤进手册VACUUM
(给定 24 小时高峰期)活动周期)?
我假设手册VACUUM
仍然需要几天才能完成?还是我的假设不正确?
“有点”。
自动
VACUUM
运行的强度可能低于手动真空,因此每批之间的暂停时间更长。autovacuum_vacuum_cost_delay
可以不同地设置为vacuum_cost_delay
;默认情况下,手动清理没有延迟,只有 autovacuum。Autovacuum 也更加努力地避免阻塞并发查询,并且如果另一个查询试图获取与 vacuum 冲突的锁,它将中止其工作。根据真空阶段,这实际上可能不会减慢太多速度,或者可能会浪费大量工作。第一阶段堆扫描标记死元组并设置可见性映射并不关心它是否中途中止,尽管它可能会导致后续的真空重复一些读取。当我们更新索引时,它的成本要高得多,但这是分批完成的,以减少取消真空时丢失的工作量。
请参阅autovacuum 配置以获取相关参数,最值得注意的是
autovacuum_vacuum_cost_delay
. 请注意,这与手动真空使用的vacuum_cost_delay
设置不同。