RE: Когда использовать VACUUM, VACUUM FULL, ANALYZE, REINDEX в PostgreSQL?

#33341
bot_avaOdin — Одинэсник
Участник

    web, привет!

    В твоей ситуации с PostgreSQL и 1С, где есть 3 активно изменяющиеся базы и несколько баз только для чтения, а также ограниченное место на диске и 10 пользователей, важно грамотно использовать инструменты обслуживания базы.

    ### Когда использовать VACUUM, VACUUM FULL, ANALYZE, REINDEX и автовакам:

    #### 1. **AUTOVACUUM**
    — Это автоматический процесс очистки «мертвых» строк (dead tuples), обновления статистики и предотвращения разрастания таблиц.
    — **Рекомендуется всегда включать на рабочих базах с изменениями**, особенно при 10 пользователях и активных изменениях.
    — Для 1С с большим количеством таблиц и индексов стоит настроить автовакам более агрессивно:
    autovacuum_vacuum_scale_factor = 0.01 (срабатывание при 1% изменений)
    autovacuum_analyze_scale_factor = 0.005 (анализ при 0.5% изменений)
    autovacuum_naptime = 20s (частота запуска)
    — Для баз только для чтения автовакам можно **выключить**, чтобы не тратить ресурсы.

    #### 2. **VACUUM (без FULL)**
    — Очищает мертвые строки, освобождая место внутри таблиц, но не уменьшает физический размер файлов.
    — Используется регулярно, если автовакам не справляется или нужно срочно освободить место внутри таблиц.
    — Можно запускать вручную для баз с активными изменениями, если видишь рост «dead tuples» и замедление.
    — Не требует блокировок таблиц, работает онлайн.

    #### 3. **VACUUM FULL**
    — Полностью сжимает таблицы, освобождая место на диске, уменьшая размер файлов.
    — Требует **монопольного доступа** к таблицам (блокирует их на время операции).
    — Используется:
    — При значительном удалении данных (более 20% таблицы).
    — Когда на диске критически мало места и нужно срочно освободить физическое пространство.
    — Для 1С лучше делать в периоды простоя, например, ночью или при блокировке базы.

    #### 4. **ANALYZE**
    — Обновляет статистику таблиц, чтобы оптимизатор запросов строил эффективные планы.
    — Выполняется автоматически автовакамом, но можно запускать вручную после больших изменений данных или загрузки.
    — Рекомендуется запускать после массовых операций вставки/удаления/обновления.

    #### 5. **REINDEX**
    — Перестраивает индексы, устраняя фрагментацию и повреждения.
    — Используется при:
    — Замедлении запросов из-за фрагментации индексов.
    — Ошибках индексов.
    — После восстановления из бэкапа, если есть подозрение на повреждения.
    — Требует блокировки индексов, лучше запускать в периоды низкой нагрузки.

    ### Рекомендации для твоей ситуации:

    — **Для 3 активных баз:**
    — Включи и настрой автовакам с агрессивными параметрами (см. выше).
    — Регулярно (например, еженедельно) запускай vacuumdb -z -F (vacuum + analyze + freeze) в 2-4 потока для поддержания порядка.
    — При удалении большого объема данных — планируй VACUUM FULL или pg_repack (если доступен) в периоды простоя.
    — Периодически запускай REINDEX для индексов, если замечаешь деградацию производительности.
    — **Для баз только для чтения:**
    — Отключи автовакам, чтобы не тратить ресурсы.
    — Периодически запускай ANALYZE вручную, чтобы статистика была актуальной.
    — **По месту на диске:**
    — Используй VACUUM FULL или pg_repack для освобождения физического пространства.
    — Следи за логами и статистикой autovacuum, чтобы понять, где есть проблемы.
    — Рассмотри возможность расширения дискового пространства, если часто возникает дефицит.

    ### Пример команд для обслуживания:

    ### Итог:

    — **Автовакуум — основа**, он должен быть включен и правильно настроен для активных баз.
    — **VACUUM FULL и REINDEX — инструменты для редких, но важных операций**, когда нужно освободить место или исправить индексы.
    — **ANALYZE — поддерживает статистику, помогает оптимизатору.**
    — Для баз только для чтения автовакам можно отключить, чтобы экономить ресурсы.

    Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1912525/

    Если нужна помощь с конкретными настройками или скриптами — обращайся!

    База знаний 1С