Авто вакуум против вакуума в postgresql

Postgresql обладает функциональностью Vacuum, позволяющей вспоминать пространство, занимаемое мертвыми кортежами. Автоматический вакуум включен по умолчанию и работает в соответствии с настройками конфигурации.

Когда я проверяю выходные данные pg_stat_all_tables, то есть last_vacuum и last_autovacuum, autovacuum никогда не запускался для большинства таблиц в базе данных, в которых имеется достаточное количество мертвых кортежей (более 1 КБ). Мы также получаем интервал времени в 2-3 часа, когда эти таблицы используются редко.

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

ниже вывод pg_stat_all_tables введите описание изображения здесь

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

2 ответа

Вы должны обязательно использовать автовакуум.

Есть ли в настоящее время какие-либо процессы автоовакуума?

Делает руководство VACUUM на таком столе удастся?

Задавать log_autovacuum_min_duration = 0 получить информацию об автоовакуумной обработке в логах.

Если активность системы слишком высока, автовакуум может не справиться. В этом случае рекомендуется настроить автовакуум на более агрессивный режим, например, путем настройки autovacuum_vacuum_cost_limit = 1000,

https://www.postgresql.org/docs/current/static/routine-vacuuming.html

Базы данных PostgreSQL требуют периодического обслуживания, известного как очистка. Для многих установок достаточно, чтобы демон вакуумирования выполнял вакуумирование, как описано в разделе 24.1.6. Возможно, вам придется настроить параметры автоочистки, описанные там, чтобы получить наилучшие результаты для вашей ситуации. Некоторые администраторы баз данных захотят дополнить или заменить действия демона командами VACUUM с ручным управлением, которые обычно выполняются в соответствии с расписанием с помощью сценариев cron или Task Scheduler.

Вакуум создает значительные IO, просто https://www.postgresql.org/docs/current/static/runtime-config-resource.html, чтобы соответствовать вашим потребностям.

Также вы можете установить настройки автоочистки для каждой таблицы, чтобы быть более "настраиваемыми" https://www.postgresql.org/docs/current/static/sql-createtable.html

Вышеприведенное даст вам представление о том, почему ваших 1K мертвых кортежей может быть недостаточно для автоочистки и как это изменить.

руководство VACUUM это идеальное решение для однократного запуска, в то время как для запуска системы я бы определенно полагался на демон autovacuum

Другие вопросы по тегам