Запрос статистики, показанной на pg_stat_progress_vacuum

Я пытаюсь понять, что означают следующие параметры: max_dead_tuples / num_dead_tuples в представлении pg_stat_progress_vacuum.

Из документации Postgres:

max_dead_tuples bigint Количество мертвых кортежей, которые мы можем сохранить, прежде чем потребуется выполнить цикл очистки индекса, на основе maintenance_work_mem.

num_dead_tuples bigint Количество мертвых кортежей, собранных с момента последнего цикла очистки индекса.

Означает ли это, что это значение изменяется в зависимости от распределения maintenance_work_mem? Я пытался установить разные значения для этого параметра, и число max_dead_tuples увеличилось до 178956970 и больше не движется. Даже если я уменьшу maintenance_work_mem, этот счетчик останется прежним. Почему это так? На что указывают эти два параметра?

Редактировать:

Заметил, что когда я сбрасываю статистику с помощью select pg_stat_reset(); после изменения maintenance_work_mem я вижу разные значения в max_dead_tuples. Но я не понимаю, почему значения несовместимы?

Пожалуйста, порекомендуйте.


person RMu    schedule 11.06.2020    source источник


Ответы (1)


VACUUM происходит так:

  1. он сканирует таблицу, пока не найдет столько мертвых кортежей, сколько умещается в autovacuum_work_mem (по умолчанию maintenance_work_mem). max_dead_tuples — это оценка PostgreSQL, сколько кортежей поместится в autovacuum_work_mem.

  2. Он сканирует все индексы и удаляет записи, указывающие на эти мертвые кортежи.

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

Насколько я знаю, изменение maintenance_work_mem не влияет на уже работающую VACUUM, но могу ошибаться.

person Laurenz Albe    schedule 11.06.2020