如何为PostgreSql RDS实例设置Autovacuum监控?

问题描述 投票:0回答:2

我需要为RDS实例设置Autovacuum监控。需要确保Autovacuuming在特定表的Autovacuuming上运行正常。什么将是有完美的方式来设置监控。什么所有的参数应该是监控的部分。

谢谢。

postgresql amazon-web-services postgresql-9.1 rds autovacuum
2个回答
0
投票

这是一个很好的查询,以找出是否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运行的频率并不重要,因为需要多长时间进行autvacuum取决于表的利用率。


0
投票

有2个参数决定了自动吸尘过程何时被触发。

- autovacuum_vacuum_scale_factor - autovacuum_vacuum_scale_factor.

真空阈值的定义为:真空阈值=真空基本阈值+真空比例因子*元组数。

其中,真空基础阈值是 autovacuum_vacuum_threshold,真空比例因子是 autovacuum_vacuum_scale_factor,tuples 的数量是 pg_class.reltuples。

'autovacuum_vacuum_threshold'(整数)指定了在任何一个表中触发VACUUM所需更新或删除的tuple的最小数量。默认值是50个tuples。

autovacuum_analyze_scale_factor'指定了在决定是否触发analyze时,要加到autovacuum_analyze_threshold中的表大小的分数。默认值是0.1(表大小的10%)。

让我们想象一下你没有设置上述两个参数的情况,它们使用的是默认值。现在,举例来说,如果你有一个有一千万条记录的表,由一万个死元组组成。这仍然不会触发自动真空,因为根据上面的公式,真空阈值将等于(一千万的50+10%),大约是100万个死元组。

因此,为了使自动吸尘更积极,你可以在表层相应地设置上述两个参数,这样可以降低阈值,从而更快地触发自动吸尘。

请参考下面的文档链接,了解更多关于自动吸尘调优的基础知识:o。 https:/www.2ndquadrant.comenblogautovacuum-tuning-basics o https:/aws.amazon.comlogsdatabasea-case-study-of-tuning-autovacuum-in-amazon-rds-for-postgresql。 o https:/www.postgresql.orgdocs9.5routine-vacuuming.html o https:/www.postgresql.orgdocs9.5runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-SCALE-FACTOR o https:/www.postgresql.orgdocs9.5runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-THRESHOLD

© www.soinside.com 2019 - 2024. All rights reserved.