Обновление статистики PostgreSQL для 1С (команда ANALYZE): ускорение запросов
- После массового проведения документов или закрытия месяца 1С начала сильно тормозить при формировании стандартных отчетов (ОСВ, карточка счета).
- Простые проводки и открытие списков документов происходят с задержкой в несколько секунд.
- Планировщик запросов PostgreSQL строит неоптимальные планы выполнения (Seq Scan вместо Index Scan) из-за устаревшей статистики таблиц.
Зачем нужно обновлять статистику в PostgreSQL?
PostgreSQL выбирает самый быстрый способ выполнения запроса 1С на основе математической статистики о распределении данных в таблицах. Если в базу загрузили много документов, а статистика не обновилась, СУБД начинает перебирать миллионы строк «вслепую», что приводит к критическим тормозам 1С.
Способ 1. Быстрое обновление через командную строку (Linux / Windows)
- Откройте терминал на сервере (или командную строку от имени Администратора в Windows).
- Переключитесь на системного пользователя
postgres(в Linux:sudo -u postgres -i). - Выполните команду полного сбора статистики для вашей базы 1С:
vacuumdb -U postgres -d имя_вашей_базы -z -vКлюч -z запускает команду ANALYZE (сбор статистики), а -v выводит подробный отчет о процессе.
Способ 2. Запуск через pgAdmin (графический интерфейс)
- Запустите программу pgAdmin и подключитесь к вашему серверу PostgreSQL.
- В левом дереве раскройте раздел Databases (Базы данных).
- Нажмите правой кнопкой мыши по вашей базе 1С и выберите пункт «Query Tool» (Инструмент запросов).
- В открывшемся окне введите команду:
ANALYZE VERBOSE;- Нажмите кнопку Execute (значок Play или клавиша F5) и дождитесь завершения операции.
Способ 3. Автоматизация в автовакууме (postgresql.conf)
Чтобы статистика всегда была актуальной без ручного вмешательства, откройте конфигурационный файл postgresql.conf и проверьте следующие параметры:
autovacuum = on
autovacuum_analyze_scale_factor = 0.05
autovacuum_analyze_threshold = 50После изменения настроек перезапустите службу PostgreSQL: systemctl restart postgresql.
Частые вопросы (FAQ)
Блокирует ли команда ANALYZE работу пользователей в 1С?
Нет! Команда ANALYZE берет только кратковременную легкую блокировку на чтение и читает случайную выборку страниц таблицы. Пользователи могут спокойно продолжать работать в 1С.
В чем разница между VACUUM и ANALYZE?
VACUUM очищает таблицы от 'мертвых строк' (удаленных версий записей) и освобождает место для новых данных, а ANALYZE собирает статистику распределения значений для планировщика запросов.
Как часто нужно запускать ANALYZE вручную?
Рекомендуется выполнять ANALYZE после масштабных операций: загрузки базы из файла .dt, группового перепроведения документов за прошлые периоды или свертки базы.
Сколько времени занимает выполнение ANALYZE на базе 100 Гб?
Обычно от 1 до 5 минут, так как утилита не сканирует всю таблицу целиком, а производит быструю статистическую выборку.