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

Когда использовать ...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

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



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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/

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



   
ОтветитьЦитата