为什么执行 autovacuum 时不运行 autoanalyze

Ram*_*Ram 1 postgresql postgresql-9.5

团队,最近发现其中一张表 autovacuum 是最新的,但 autoanalyze 不是最新的。参数默认配置。这将如何发生?如果 autovacuum 参数满足条件,那么它也应该执行自动分析。

请分享一些对此的见解。

谢谢 在此输入图像描述

Lau*_*lbe 8

Autovacuum 和 autoanalyze 由不同的条件触发并使用不同的统计计数器:

  • n_dead_tup如果死元组 ( in )的数量pg_stat_all_tables超过阈值(默认情况下,约为reltuplesfrom的 20% pg_class),autovacuum 就会开始运行。从 v13 开始,有一个类似的条件n_ins_since_vacuum,即自上次 以来插入的元组数量VACUUM

  • 如果更改的元组数量 ( n_mod_since_analyzein pg_stat_all_tables) 超过阈值(默认情况下,大约为reltuplesfrom的 10% pg_class),则 autoanalyze 开始运行。

每当 autovacuum 或 autoanalyze 完成时,相应的统计计数器都会重置为 0。

因此,autovacuum 和 autoanalyze 运行之间没有直接联系(除非两者都与表修改相关,除非它是反环绕真空运行)。