为什么在执行 autovacuum 时自动分析不 运行

Why autoanalyze not ran when autovacuum performed

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

请分享一些对此的见解。

谢谢

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

  • 如果死元组(pg_stat_all_tables 中的n_dead_tup)的数量超过阈值(默认情况下,约 20% reltuples 来自 pg_class)。从v13开始,有类似条件n_ins_since_vacuum,自上次插入的元组数VACUUM.

  • 如果已更改的元组(pg_stat_all_tables 中的n_mod_since_analyze)的数量超过阈值(默认情况下,大约 [=10%],则自动分析开始 运行ning 12=] 来自 pg_class).

只要 autovacuum 或 autoanalyze 完成,相应的统计计数器就会重置为 0。

所以 autovacuum 和 autoanalyze 运行s 之间没有直接联系(除了两者都连接到 table 修改,除非它是反环绕真空 运行)。