автоматический вакуум против вакуума в postgresql

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

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

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

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

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


person YogeshR    schedule 29.01.2018    source источник
comment
Ну, это все равно, что спрашивать, какую коробку передач вы должны использовать в автомобиле: механическую или автоматическую. Среднестатистический пользователь определенно будет работать лучше с автоматическим режимом. Pro будет использовать ручное управление, чтобы выжать эти последние капли скорости. Теперь, если автопылесос не запускается и вы уверены, что он должен выложить вашу конфигурацию и все необходимые данные, а мы посмотрим.   -  person freakish    schedule 29.01.2018
comment
Пожалуйста. переместите эту тему на dba.stackexchange.com. Это не связано с программированием.   -  person kometen    schedule 29.01.2018


Ответы (2)


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

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

Удается ли руководство VACUUM по такой таблице?

Установите log_autovacuum_min_duration = 0, чтобы получить информацию об обработке автоочистки в журналах.

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

person Laurenz Albe    schedule 29.01.2018
comment
автоочистка включена по умолчанию. Я запускал ручной пылесос для одного такого стола, и он работал нормально. - person YogeshR; 29.01.2018
comment
Возможно, это сработает, если вы настроите автоочистку, как указано в обновлении к моему ответу. - person Laurenz Albe; 29.01.2018

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

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

вакуум создает значительный объем операций ввода-вывода, так как просто https://www.postgresql.org/docs/current/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST в соответствии с вашими потребностями.

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

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

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

person Vao Tsun    schedule 29.01.2018
comment
Будет ли хорошей идеей автоматизировать ручную очистку с помощью задания cron или любой другой утилиты? - person YogeshR; 29.01.2018
comment
Я бы больше всего полагался на автовакуум. и при необходимости выполните ручной вакуум. Кроннинговые вакуумные прогоны всегда заканчиваются тем, что администратор базы данных что-то забывает - person Vao Tsun; 29.01.2018