Авто вакуум против вакуума в postgresql
Postgresql обладает функциональностью Vacuum, позволяющей вспоминать пространство, занимаемое мертвыми кортежами. Автоматический вакуум включен по умолчанию и работает в соответствии с настройками конфигурации.
Когда я проверяю выходные данные pg_stat_all_tables, то есть last_vacuum и last_autovacuum, autovacuum никогда не запускался для большинства таблиц в базе данных, в которых имеется достаточное количество мертвых кортежей (более 1 КБ). Мы также получаем интервал времени в 2-3 часа, когда эти таблицы используются редко.
Ниже приведены настройки автоочистки для моей базы данных.
Я хочу спросить, что это хорошая идея, чтобы зависеть только от автоматического вакуума? Существуют ли какие-либо специальные настройки, необходимые для правильной работы автоочистки?
Должны ли мы установить ручной вакуум? Должны ли мы использовать оба параллельно или просто отключить автовакуум и использовать только ручной вакуум?
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