Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

INFO_PG_VACUUM_ANALYZE 1С:Предприятие и СУБД

PostgreSQL для 1С: настройка Autovacuum, VACUUM и ANALYZE

Обновлено: 27.08.2026 · Официальная документация ↗

Почему база 1С на PostgreSQL начинает тормозить со временем?

В отличие от MSSQL, архитектура СУБД PostgreSQL использует механизм MVCC (многоверсионность данных). Когда 1С обновляет или удаляет документ, старая запись физически не стирается, а помечается как «мертвая» (dead tuple). Без регулярного обслуживания возникают серьезные проблемы:

  • Резкое замедление проведения документов и формирования отчетов;
  • Разрастание размера базы данных на диске в 2-4 раза из-за скопления мертвого мусора;
  • Планировщик запросов (Query Planner) строит неоптимальные планы выполнения из-за устаревшей статистики ANALYZE.

Настройка регламентного обслуживания и Autovacuum

  1. Шаг 1. Понимание разницы между VACUUM и ANALYZE

    • ANALYZE — собирает статистику о распределении данных в таблицах. Позволяет СУБД выбирать самые быстрые индексы.
    • VACUUM — очищает страницы диска от «мертвых» строк, делая место доступным для новых записей 1С.
    • VACUUM FULL — физически сжимает таблицы и возвращает место ОС, но намертво блокирует всю базу на время работы (в продакшене используется крайне редко).
  2. Шаг 2. Оптимальные параметры Autovacuum в postgresql.conf

    Откройте файл /etc/postgresql/X.X/main/postgresql.conf и настройте автоматический сборщик мусора под специфику 1С:

    autovacuum = on
    autovacuum_max_workers = 4
    autovacuum_naptime = 20s
    autovacuum_vacuum_threshold = 50
    autovacuum_analyze_threshold = 50
    autovacuum_vacuum_scale_factor = 0.05
    autovacuum_analyze_scale_factor = 0.02
    autovacuum_vacuum_cost_limit = 1000
  3. Шаг 3. Ручной ночной скрипт обслуживания через cron

    Для высоконагруженных баз 1С рекомендуется запускать ночной скрипт полной переиндексации и сбора статистики по расписанию:

    # Добавьте в crontab пользователя postgres:
    0 3 * * * vacuumdb -U postgres -d your_1c_db_name --analyze --verbose

Важно: Перезапустите службу PostgreSQL после изменения конфигурационного файла: sudo systemctl restart postgresql.

💡 Практика специалистов: Для сборок PostgreSQL от Postgres Professional под 1С обязательно занижайте autovacuum_vacuum_scale_factor до 0.02–0.05. Стандартные 0.20 для PostgreSQL заставляют СУБД ждать изменения 20% таблицы, что для таблиц движений регистров 1С на 50 млн строк приводит к полному коллапсу производительности до первого срабатывания вакуума.

Частые вопросы (FAQ)

Блокирует ли обычный VACUUM работу пользователей 1С?

Нет. Стандартный фоновый VACUUM и Autovacuum работают параллельно с транзакциями 1С и не блокируют чтение или запись таблиц.

Почему не рекомендуется часто запускать VACUUM FULL?

VACUUM FULL накладывает эксклюзивную блокировку (ExclusiveLock) на всю таблицу. Пользователи 1С получат ошибку превышения времени ожидания блокировки транзакции.

Как проверить, сколько «мертвых» строк накопилось в базе?

Выполните SQL-запрос: SELECT relname, n_dead_tup, n_live_tup FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 10;.

Что дает обновление статистики ANALYZE для 1С?

Оно исключает ситуации, когда при проведении документа СУБД ошибочно выбирает полное сканирование всей многомиллионной таблицы (Seq Scan) вместо использования быстрого индекса (Index Scan).

Полезные материалы
Рекомендуем