PostgreSQL: сжатие и ускорение базы 1С с помощью команды VACUUM FULL
- База данных PostgreSQL занимает сотни гигабайт на диске, хотя половину старых документов удалили.
- Запросы 1С и проведение документов работают медленно из-за чтения пустых «мертвых» строк.
- На сервере заканчивается свободное дисковое пространство.
- Автовакуум (autovacuum) не успевает очищать интенсивно перезаписываемые таблицы регистров.
Что такое «мертвые строки» и зачем нужен VACUUM простыми словами?
Когда вы изменяете или удаляете документ в 1С, база PostgreSQL физически не удаляет старую запись с диска. Она просто помечает ее невидимым флажком «удалено» (Dead Tuple). Со временем эти «мертвые строки» накапливаются, база распухает до сотен гигабайт, а сервер тратит кучу времени на перелопачивание мусора.
- Обычный VACUUM: Находит мертвые строки и разрешает перезаписывать их новыми данными. Размер файла базы на диске не уменьшается! Можно запускать прямо во время работы пользователей.
- VACUUM FULL: Полностью пересоздает таблицы базы заново, выбрасывая весь мусор и физически сжимает базу на диске, возвращая гигабайты свободного места. Требует полной блокировки базы (монопольный режим)!
Пошаговый регламент запуска VACUUM FULL:
Шаг 1. Отключение пользователей и службы 1С
Команда VACUUM FULL намертво блокирует таблицы. Если в этот момент кто-то зайдет в 1С, база зависнет.
- Остановите службу Агент сервера 1С:Предприятия через
services.msc(илиsystemctl stop srv1cv8-8.3...). - Убедитесь, что на диске с базой PostgreSQL есть свободное место, равное как минимум размеру сжимаемой базы (PostgreSQL будет создавать копию таблицы в процессе сжатия).
Шаг 2. Запуск очистки через pgAdmin или консоль
Откройте pgAdmin или подключитесь через консоль psql к вашей базе 1С и выполните команду:
VACUUM FULL VERBOSE ANALYZE;Шаг 3. Что происходит во время работы команды?
FULL— пересобирает таблицы без пустых мест и уменьшает размер файлов на SSD.VERBOSE— выводит подробный отчет о каждой сжатой таблице.ANALYZE— собирает свежую статистику распределения данных для оптимизатора запросов.
Шаг 4. Запуск службы 1С
После завершения операции (надпись «Query returned successfully») запустите службу 1С обратно. База станет работать значительно быстрее, а диск освободится.
Частые вопросы (FAQ)
Сколько времени длится VACUUM FULL?
В зависимости от скорости дисков и объема базы: от 15 минут для базы 50 ГБ до 2-4 часов для терабайтных баз данных.
Что произойдет, если прервать VACUUM FULL посередине?
База не повредится. PostgreSQL откатит транзакцию до исходного состояния, но место на диске не освободится.
Как часто нужно запускать VACUUM FULL?
В штатном режиме при правильно настроенном autovacuum запускать VACUUM FULL нужно не чаще 1-2 раз в год или после масштабного удаления старых документов за прошлые года.
Почему VACUUM FULL выдал ошибку 'No space left on device'?
Для пересборки таблицы требуется временное свободное место на диске, равное объему этой таблицы. Если места на диске 0, сжатие аварийно прерывается.