Я не думаю, что вам нужно вручную пылесосить, если вы не начинаете видеть снижение производительности. Тем не менее, я настоятельно рекомендую пересмотреть настройки вакуума и автоочистки и настроить их под свои нужды.
Чтобы увидеть текущие настройки, запустите этот запрос:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Большинство полей говорят сами за себя, но вот документация по ним:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Я бы сказал, что ваша цель должна состоять в том, чтобы настроить автовакуум для последовательной очистки мусора, но не запускать автовакуум постоянно
Наиболее важные настройки:
- autovacuum_vacuum_scale_factor - определяет процент кортежей, которые могут быть отключены до начала очистки. Значение по умолчанию = 0,2
- autovacuum_vacuum_threshold - минимальное количество мертвых кортежей перед началом очистки. Значение по умолчанию = 50
Порог помогает предотвратить слишком частый запуск процесса очистки для небольших таблиц.
Настройки по умолчанию работают хорошо, если у вас нет очень больших таблиц. Проще говоря, если у вас есть таблица, которая занимает 100 ГБ, вы собираетесь накапливать 20 ГБ мусора, прежде чем будет запущен автовакуум. Поэтому я обычно рекомендую устанавливать низкий коэффициент масштабирования. Как низко вы должны определить для себя. Я использую 0,05 на моем текущем проекте
Пороги тоже можно увеличить. Во многих приложениях есть пара таблиц, которые часто обновляются, и 50 кортежей не так уж много. Увеличение этого значения до 1000 не должно привести к каким-либо проблемам, но, конечно, вы должны рассмотреть свой собственный случай
Вы также можете отрегулировать автоочистку и иметь различные настройки для некоторых из ваших столов.
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Если вы настраиваете scale_factor и пороговые значения, все будет в порядке. Вы также можете увеличить значение autovacuum_vacuum_cost_limit
, которое по умолчанию равно vacuum_cost_limit
200. Это очень важная особенность вакуума, которая не позволяет ему поглощать все ресурсы и позволяет вашему приложению работать с данными даже во время процесса очистки. , но значение по умолчанию слишком низкое. Увеличение его до 1000 не должно привести к каким-либо значительным задержкам, но позволит вакуумному процессу завершиться намного быстрее.
Конечно, вы также можете запустить вакуум вручную. В самом простом случае вы можете выполнить простую задачу cron, которая будет выполнять полную очистку каждую ночь, когда к вашей БД не обращаются часто
Надеюсь, это поможет!