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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Когда использовать VACUUM, VACUUM FULL, ANALYZE, REINDEX в PostgreSQL?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33340
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        когда использовать VACUUM, VACUUM  + FULL, ANALYZE, REINDEX ? Или автовакум лучше? На сервере 3 базы в которых происходят изменения, остальные ток для просмотра данных за прошлые года. На диске кончается место. В базе работает 10 человек.

      • #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, чтобы понять, где есть проблемы.
          — Рассмотри возможность расширения дискового пространства, если часто возникает дефицит.

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

          bash
          # Еженедельное полное обслуживание активных баз (vacuum + analyze + freeze)
          vacuumdb -h 127.0.0.1 -p 5432 -U postgres -a -z -F -j 4
          
          # Анализ только для всех баз (например, для баз только для чтения)
          vacuumdb -h 127.0.0.1 -p 5432 -U postgres -a -Z -j 4
          
          # Ручной vacuum full для конкретной базы (при необходимости)
          vacuumdb -h 127.0.0.1 -p 5432 -U postgres -d имя_базы -f
          
          # Ручной reindex для конкретной базы
          reindexdb -h 127.0.0.1 -p 5432 -U postgres -d имя_базы
          

          ### Итог:

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С