Почему 1С на PostgreSQL под Windows периодически «залипает» и как это исправить?

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

Многие системные администраторы и разработчики сталкиваются с ситуацией, когда сервер 1С:Предприятие, работающий в связке с PostgreSQL на операционной системе Windows, начинает вести себя нестабильно. Это проявляется в кратковременных (от нескольких секунд до минуты) «залипаниях» интерфейса: пользователи не могут ввести символ, нажать кнопку или открыть отчет. При этом диспетчер задач показывает низкую нагрузку на процессор и дисковую подсистему. Рассмотрим подробнее причины этого явления и разберем по шагам методы решения.

Выясним причину: почему возникают «залипания»?

Проанализируем ситуацию. Основная проблема кроется в архитектурном различии обработки файлов между Linux и Windows. В PostgreSQL существует процесс сбора статистики (stats collector), который постоянно записывает данные во временные файлы. В версиях PostgreSQL до 15-й включительно этот процесс работает так: данные пишутся в файл global.tmp, а затем переименовываются в global.stat.

В ОС Windows действует строгая политика блокировки открытых файлов. Если в момент переименования файл оказывается занят другим процессом (например, антивирусом, системой индексации Windows или самой СУБД), происходит ошибка Permission denied. В 1С, где интенсивность запросов к метаданным и статистике крайне высока, эта задержка вызывает каскадное ожидание всех рабочих процессов rphost, что пользователи видят как «зависание» программы.

Чтобы подтвердить диагноз, нам необходимо заглянуть в лог-файлы PostgreSQL. Ищите записи следующего вида:


2018-09-03 13:19:02 MSK СООБЩЕНИЕ: не удалось переименовать временный файл статистики из "pg_stat_tmp/global.tmp" в "pg_stat_tmp/global.stat": Permission denied

Если вы видите подобные сообщения — значит, ваша проблема вызвана именно механизмом сбора статистики СУБД.

Решение 1: Обновление PostgreSQL до патченной версии

Наиболее простым и эффективным способом решения для версий 9.6, 10, 11 и выше является использование специализированных сборок от Postgres Pro (редакция для 1С). Разработчики выпустили патчи, которые оптимизируют работу с временными файлами на Windows, уменьшая вероятность конфликта блокировок.

  1. Перейдем на сайт производителя и скачаем последнюю стабильную версию (например, Postgres Pro 1C версии 10 и выше).
  2. Проведем обновление СУБД. Обратите внимание, что в сборках, начиная с 9.6.10, эта проблема была официально минимизирована.
  3. После обновления проверим логи на наличие ошибок Permission denied. Как правило, в новых минорных релизах частота таких ошибок сводится к нулю.

Решение 2: Переход на PostgreSQL 15 и выше

Если инфраструктура позволяет, рассмотрим самый радикальный и современный метод решения. Начиная с PostgreSQL 15, механизм сбора статистики был полностью переписан. Теперь статистика хранится не в файлах на диске, а в разделяемой памяти (shared memory).

Это нововведение полностью исключает дисковые операции записи и переименования файлов .stat, а значит, ошибка Permission denied на Windows физически не может возникнуть. Это самое стабильное решение для высоконагруженных систем 1С на Windows.

Решение 3: Использование RAM-диска для статистики

Если вы не можете обновить версию СУБД в данный момент, применим обходной путь (workaround) — вынос папки статистики в оперативную память. Это позволит значительно ускорить операции переименования и снизит вероятность их блокировки со стороны ОС.

Разберем процедуру по шагам:

  1. Установим любую утилиту для создания RAM-диска (например, ImDisk).
  2. Создадим небольшой виртуальный диск в оперативной памяти (достаточно 128-256 МБ).
  3. Остановим службу PostgreSQL.
  4. В файле конфигурации postgresql.conf найдем параметр stats_temp_directory.
  5. Укажем путь к папке на RAM-диске: stats_temp_directory = 'R:/pg_stat_tmp'
  6. Запустим службу СУБД. Теперь временные файлы статистики будут «летать» в оперативной памяти, не нагружая SSD и не конфликтуя с дисковыми подсистемами Windows.

Решение 4: Настройка антивируса и исключений ОС

Часто «залипания» провоцируются защитным ПО, которое пытается просканировать файл global.tmp в момент его создания. Настроим исключения, чтобы минимизировать влияние сторонних процессов.

Добавим в список исключений антивируса:

Решение 5: Настройка сети и TCP Loopback

При работе на ОС Windows (особенно пользовательских редакций типа Windows 10) может возникать задержка во взаимодействии между сервером 1С и PostgreSQL через локальный стек TCP/IP. Проанализируем сетевые настройки.

Попробуем выполнить проверку связи командой ping с максимальным пакетом:

ping localhost -l 65500

Если наблюдаются потери пакетов или большие задержки даже на localhost, необходимо проверить настройки сетевой карты и антивирусных экранов. Также рекомендуется включить механизм TCP Loopback Fast Path (если ваша версия ОС и СУБД его поддерживают), что позволит ускорить передачу данных внутри сервера.

Дополнительные советы по оптимизации производительности

Помимо устранения «залипаний», проанализируем параметры обслуживания базы данных:

Таким образом, мы выяснили, что основной причиной периодических остановок работы является конфликт блокировок файлов статистики PostgreSQL в среде Windows. Использование современных сборок Postgres Pro или переход на PostgreSQL 15+ является наиболее надежным способом обеспечения стабильной работы системы 1С.

← На главную