Проблема низкой производительности 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С это выглядит как бесконечное «колесо ожидания» при открытии динамического списка. Посмотрим, как решить эту проблему системно:
pg_stat_tmp на виртуальный диск в оперативной памяти. Это исключит влияние дисковой подсистемы Windows на процесс обновления статистики.postgres.exe и вся папка Data в исключения сканирования. Любая попытка антивируса «проверить» временный файл статистики приведет к ошибке доступа.Конфигурация 1С:ERP крайне требовательна к ресурсам. Если база была перенесена с MSSQL, стандартных настроек PostgreSQL «из коробки» будет недостаточно. Рассмотрим основные параметры файла postgresql.conf, которые напрямую влияют на скорость формирования сложных журналов документов:
Параметры памяти:
shared_buffers: Для сервера с 64 ГБ ОЗУ установим значение около 16 ГБ. На Windows не рекомендуется выделять более 25% оперативной памяти под этот параметр из-за особенностей кэширования ОС.effective_cache_size: Установим на уровне 48 ГБ (примерно 75% от общего объема). Это подскажет планировщику, сколько памяти доступно для кэширования данных.temp_buffers: Для ERP это критически важный параметр. Установим 64MB или даже 128MB. Система активно использует временные таблицы для расчета прав доступа (RLS) и построения динамических списков.Оптимизация планировщика:
Для корректной работы 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
Если после оптимизации СУБД журнал «Документы закупки» все равно открывается дольше 5-10 секунд, причину стоит искать внутри самой 1С. Рассмотрим два основных фактора:
1. Ограничение прав на уровне записей (RLS): В ERP механизм RLS значительно усложняет SQL-запросы. PostgreSQL сложнее обрабатывает глубоко вложенные подзапросы, которые генерирует 1С для проверки прав. Проанализируем ситуацию: попробуем открыть журнал под пользователем с полными правами. Если скорость открытия возрастает в разы — проблема именно в настройках RLS. В этом случае стоит рассмотреть переход на «Производительный» режим RLS (включается в настройках профилей групп доступа).
2. Измененные динамические списки: Часто разработчики добавляют в стандартные журналы дополнительные колонки (например, «Статус оплаты» или «Остаток по складу»), используя произвольные запросы с левыми соединениями (LEFT JOIN). Посмотрим на пример типичной ошибки:
ВЫБРАТЬ
ДокументЗакупки.Ссылка,
ДокументЗакупки.Номер,
ДокументЗакупки.Дата,
ЕСТЬNULL(Взаиморасчеты.СуммаОстаток, 0) КАК ОстатокОплаты
ИЗ
Документ.ПриобретениеТоваровУслуг КАК ДокументЗакупки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПоставщиками.Остатки КАК Взаиморасчеты
ПО ДокументЗакупки.Ссылка = Взаиморасчеты.ЗаказПоставщику
Такой запрос заставляет PostgreSQL выполнять соединение с виртуальной таблицей остатков для каждой строки журнала. На больших объемах данных это фатально для производительности. Рекомендуем выносить такие данные в дополнительные реквизиты или кэшировать их, чтобы динамический список обращался только к основной таблице документа.
Поскольку наша база работает на Windows, проанализируем настройки самой ОС. Даже мощное железо (AMD EPYC, RAID 10) может работать не в полную силу из-за программных ограничений:
fsutil behavior set disablelastaccess 1.Несмотря на то, что вышеописанные методы позволяют сократить время открытия документов с 2 минут до 10 секунд, важно понимать архитектурную специфику. PostgreSQL на Windows эмулирует многие функции (например, работу с памятью и процессами) через прослойки совместимости. В среде Linux работа с памятью (Huge Pages) и механизмы fork() происходят нативно, что дает стабильный прирост производительности на тех же аппаратных мощностях.
Если ваша база 1С:ERP продолжает расти, рекомендуем запланировать миграцию сервера БД на Linux (Ubuntu или Astra Linux), что позволит забыть о проблемах с pg_stat_tmp и максимально эффективно использовать ресурсы процессоров AMD EPYC.