我需要为 RDS 实例设置 Autovacuum 监控。需要确保 Autovacuuming 在特定于表的 Autovacuuming 上运行良好。有什么完美的方法来设置监控。所有参数应该是监控的一部分。
谢谢。
我需要为 RDS 实例设置 Autovacuum 监控。需要确保 Autovacuuming 在特定于表的 Autovacuuming 上运行良好。有什么完美的方法来设置监控。所有参数应该是监控的一部分。
谢谢。
有 2 个参数决定何时触发 autovacuum 过程
• autovacuum_vacuum_threshold • autovacuum_vacuum_scale_factor
真空阈值定义为:真空阈值 = 真空基础阈值 + 真空比例因子 * 元组数
其中,vacuum 基础阈值是 autovacuum_vacuum_threshold,vacuum 比例因子是 autovacuum_vacuum_scale_factor,元组数是 pg_class.reltuples。
'autovacuum_vacuum_threshold'(整数)指定在任何一个表中触发 VACUUM 所需的更新或删除元组的最小数量。默认值为 50 个元组。
'autovacuum_analyze_scale_factor' 指定在决定是否触发 ANALYZE 时添加到 autovacuum_analyze_threshold 的表大小的一部分。默认值为 0.1(表大小的 10%)。
让我们想象一个场景,您没有设置上述两个参数并且它们使用默认值。现在,例如,如果您有一个包含一千万条记录的表,其中包含一万个死元组。这仍然不会触发 autovacuum,因为根据上述公式,vacuum 阈值将等于 (50+10% of 1000 万),大约是 100 万个死元组。
因此,为了使 autovacuum 更积极,您可以在 table 级别相应地设置上述两个参数,以便它可以降低阈值,从而更快地触发 autovacuum。
有关 Autovacuum Tuning 基础知识的更多信息,请参阅以下文档链接: o https://www.2ndquadrant.com/en/blog/autovacuum-tuning-basics/ o https://aws.amazon.com/blogs/database /a-case-study-of-tuning-autovacuum-in-amazon-rds-for-postgresql/ o https://www.postgresql.org/docs/9.5/routine-vacuuming.html o https://www. postgresql.org/docs/9.5/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-SCALE-FACTOR o https://www.postgresql.org/docs/9.5/runtime-config-autovacuum.html#GUC- AUTOVACUUM-VACUUM-THRESHOLD
这是一个很好的查询来确定 autovacuum 是否过期:
SELECT t.oid::regclass AS tablename,
s.n_dead_tup AS dead_tuples,
t.reltuples AS live_tuples,
GREATEST(s.n_dead_tup::float8 - 50.0, 0) / t.reltuples AS dead_ratio
FROM pg_stat_all_tables AS s
JOIN pg_namespace AS n
ON s.schemaname = n.nspname
JOIN pg_class AS t
ON t.relname = s.relname
AND t.relnamespace = n.oid
WHERE t.reltuples <> 0
ORDER BY dead_ratio DESC;
如果最后一个数字明显高于 0.2(并且您没有更改 autovacuum 参数),则有些问题。
测量 autovacuum 运行的频率并不重要,因为它取决于表的利用率,需要 autvacuum 的频率。