Как ускорить открытие «Документов закупки» в 1С при работе с PostgreSQL на Windows?

Системный администратор 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

Проблема низкой производительности 1С:Предприятие в связке с PostgreSQL на операционных системах семейства Windows — одна из самых обсуждаемых тем среди системных администраторов. Особенно остро это ощущается при переходе с MSSQL или при работе с тяжелыми конфигурациями, такими как 1С:ERP Управление предприятием. В данной статье мы подробно разберем, почему «Документы закупки» или другие журналы могут открываться по несколько минут, и как сократить это время до приемлемых значений.

Разберем основную причину: Ошибка доступа к файлам статистики

Одной из наиболее коварных проблем PostgreSQL на Windows является ошибка could not rename temporary statistics file "pg_stat_tmp/global.tmp" to "pg_stat_tmp/global.stat": Permission denied. Давайте проанализируем, почему это происходит. PostgreSQL постоянно обновляет статистику активности базы данных, записывая данные во временные файлы. В ОС Windows механизмы работы с файловой системой отличаются от Linux. Когда дисковая нагрузка возрастает, Windows может кратковременно блокировать файлы для индексации или проверки антивирусом, либо просто не успевать обрабатывать запросы на переименование файлов в каталоге pg_stat_tmp.

В результате СУБД буквально «замирает» на несколько секунд в ожидании освобождения файла. Для пользователя 1С это выглядит как бесконечное «колесо ожидания» при открытии динамического списка. Посмотрим, как решить эту проблему системно:

  1. Использование специализированных дистрибутивов: Настоятельно рекомендуем использовать сборки PostgreSQL, оптимизированные специально для 1С (например, с сайта 1c.postgres.ru). В этих версиях многие специфичные для Windows ошибки работы с файловой системой уже исправлены на уровне исходного кода.
  2. Перенос каталога статистики на RAM-диск: Если задержки сохраняются, наиболее эффективным решением будет вынос папки pg_stat_tmp на виртуальный диск в оперативной памяти. Это исключит влияние дисковой подсистемы Windows на процесс обновления статистики.
  3. Исключения антивируса: Проверим, добавлены ли процессы postgres.exe и вся папка Data в исключения сканирования. Любая попытка антивируса «проверить» временный файл статистики приведет к ошибке доступа.

Проанализируем настройки PostgreSQL для 1С:ERP

Конфигурация 1С:ERP крайне требовательна к ресурсам. Если база была перенесена с MSSQL, стандартных настроек PostgreSQL «из коробки» будет недостаточно. Рассмотрим основные параметры файла postgresql.conf, которые напрямую влияют на скорость формирования сложных журналов документов:

Параметры памяти:

Оптимизация планировщика:

Для корректной работы 1С с PostgreSQL крайне важно использовать модули online_analyze и plantuner. Без них планировщик часто строит неоптимальные планы запросов для временных таблиц 1С, что приводит к перебору всей таблицы (Sequential Scan) вместо использования индексов. Убедимся, что в postgresql.conf добавлены следующие строки:


shared_preload_libraries = 'online_analyze, plantuner'
online_analyze.threshold = 50
online_analyze.scale_factor = 0.1
online_analyze.enable_temporary = on
online_analyze.verbose = off

Выясним влияние RLS и динамических списков

Если после оптимизации СУБД журнал «Документы закупки» все равно открывается дольше 5-10 секунд, причину стоит искать внутри самой 1С. Рассмотрим два основных фактора:

1. Ограничение прав на уровне записей (RLS): В ERP механизм RLS значительно усложняет SQL-запросы. PostgreSQL сложнее обрабатывает глубоко вложенные подзапросы, которые генерирует 1С для проверки прав. Проанализируем ситуацию: попробуем открыть журнал под пользователем с полными правами. Если скорость открытия возрастает в разы — проблема именно в настройках RLS. В этом случае стоит рассмотреть переход на «Производительный» режим RLS (включается в настройках профилей групп доступа).

2. Измененные динамические списки: Часто разработчики добавляют в стандартные журналы дополнительные колонки (например, «Статус оплаты» или «Остаток по складу»), используя произвольные запросы с левыми соединениями (LEFT JOIN). Посмотрим на пример типичной ошибки:


ВЫБРАТЬ
    ДокументЗакупки.Ссылка,
    ДокументЗакупки.Номер,
    ДокументЗакупки.Дата,
    ЕСТЬNULL(Взаиморасчеты.СуммаОстаток, 0) КАК ОстатокОплаты
ИЗ
    Документ.ПриобретениеТоваровУслуг КАК ДокументЗакупки
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПоставщиками.Остатки КАК Взаиморасчеты
    ПО ДокументЗакупки.Ссылка = Взаиморасчеты.ЗаказПоставщику

Такой запрос заставляет PostgreSQL выполнять соединение с виртуальной таблицей остатков для каждой строки журнала. На больших объемах данных это фатально для производительности. Рекомендуем выносить такие данные в дополнительные реквизиты или кэшировать их, чтобы динамический список обращался только к основной таблице документа.

Оптимизация операционной системы и дисков

Поскольку наша база работает на Windows, проанализируем настройки самой ОС. Даже мощное железо (AMD EPYC, RAID 10) может работать не в полную силу из-за программных ограничений:

Заключение: Почему Linux остается приоритетом?

Несмотря на то, что вышеописанные методы позволяют сократить время открытия документов с 2 минут до 10 секунд, важно понимать архитектурную специфику. PostgreSQL на Windows эмулирует многие функции (например, работу с памятью и процессами) через прослойки совместимости. В среде Linux работа с памятью (Huge Pages) и механизмы fork() происходят нативно, что дает стабильный прирост производительности на тех же аппаратных мощностях.

Если ваша база 1С:ERP продолжает расти, рекомендуем запланировать миграцию сервера БД на Linux (Ubuntu или Astra Linux), что позволит забыть о проблемах с pg_stat_tmp и максимально эффективно использовать ресурсы процессоров AMD EPYC.

← На главную