Как настроить мониторинг Autovacuum для PostgreSql экземпляров RDS - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно настроить мониторинг Autovacuum для экземпляров RDS. Необходимо убедиться, что автоочистка работает нормально в соответствии с таблицей c Автоочистка. Какой бы там был идеальный способ настройки мониторинга. Какие все параметры должны быть частью мониторинга.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Есть 2 параметра, которые определяют, когда запускается процесс автоочистки

• autovacuum_vacuum_threshold • autovacuum_vacuum_scale_factor

Порог вакуума определяется как: вакуумный порог = базовый порог вакуума + коэффициент масштабирования вакуума * число из кортежей

, где базовый вакуумный порог равен autovacuum_vacuum_threshold, масштабный коэффициент вакуума равен autovacuum_vacuum_scale_factor, а количество кортежей равно pg_class.reltuples.

Параметр autovacuum_vacuum_threshold (целое число) определяет минимальное количество обновленных или удаленных кортежей, необходимое для запуска VACUUM в любой одной таблице. По умолчанию это 50 кортежей.

Параметр autovacuum_analyze_scale_factor указывает долю размера таблицы, которую необходимо добавить к autovacuum_analyze_threshold при принятии решения о запуске АНАЛИЗА. По умолчанию используется значение 0,1 (10% от размера таблицы).

Давайте представим сценарий, в котором вы не установили два вышеуказанных параметра, и они используют значения по умолчанию. Теперь, например, если у вас есть таблица с десятью миллионами записей, состоящая из десяти тысяч мертвых кортежей. Это все равно не вызовет автовакуум, так как согласно приведенной выше формуле порог вакуума будет равен (50 + 10% от десяти миллионов), что составляет примерно 1 миллион мертвых кортежей.

Следовательно, чтобы сделать автовакуум более агрессивным, вы можете соответствующим образом установить два вышеупомянутых параметра на уровне таблицы, чтобы он мог снизить пороговое значение и, следовательно, активировать автовакуум быстрее.

См. Приведенную ниже документацию. ссылка для получения дополнительной информации об основах 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 -SALE-FACTOR o https://www.postgresql.org/docs/9.5/runtime-config-autovacuum.html#GUC -AUTOVACUUM-VACUUM-THRESHOLD

0 голосов
/ 04 мая 2020

Это хороший запрос, чтобы выяснить, просрочен ли автовакуум:

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 (и вы не меняли параметры автоочистки), что-то подозрительно.

Не важно измерить, как часто запускается автоочистка, потому что от использования таблицы зависит, как часто необходим автоочистка.

...