Многие системные администраторы и разработчики сталкиваются с ситуацией, когда сервер 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
Если вы видите подобные сообщения — значит, ваша проблема вызвана именно механизмом сбора статистики СУБД.
Наиболее простым и эффективным способом решения для версий 9.6, 10, 11 и выше является использование специализированных сборок от Postgres Pro (редакция для 1С). Разработчики выпустили патчи, которые оптимизируют работу с временными файлами на Windows, уменьшая вероятность конфликта блокировок.
Permission denied. Как правило, в новых минорных релизах частота таких ошибок сводится к нулю.Если инфраструктура позволяет, рассмотрим самый радикальный и современный метод решения. Начиная с PostgreSQL 15, механизм сбора статистики был полностью переписан. Теперь статистика хранится не в файлах на диске, а в разделяемой памяти (shared memory).
Это нововведение полностью исключает дисковые операции записи и переименования файлов .stat, а значит, ошибка Permission denied на Windows физически не может возникнуть. Это самое стабильное решение для высоконагруженных систем 1С на Windows.
Если вы не можете обновить версию СУБД в данный момент, применим обходной путь (workaround) — вынос папки статистики в оперативную память. Это позволит значительно ускорить операции переименования и снизит вероятность их блокировки со стороны ОС.
Разберем процедуру по шагам:
postgresql.conf найдем параметр stats_temp_directory.
stats_temp_directory = 'R:/pg_stat_tmp'
Часто «залипания» провоцируются защитным ПО, которое пытается просканировать файл global.tmp в момент его создания. Настроим исключения, чтобы минимизировать влияние сторонних процессов.
Добавим в список исключений антивируса:
postgres.exe.rphost.exe, rmngr.exe, ragent.exe.*.stat, *.tmp (внутри каталогов базы данных).PGDATA).При работе на ОС Windows (особенно пользовательских редакций типа Windows 10) может возникать задержка во взаимодействии между сервером 1С и PostgreSQL через локальный стек TCP/IP. Проанализируем сетевые настройки.
Попробуем выполнить проверку связи командой ping с максимальным пакетом:
ping localhost -l 65500
Если наблюдаются потери пакетов или большие задержки даже на localhost, необходимо проверить настройки сетевой карты и антивирусных экранов. Также рекомендуется включить механизм TCP Loopback Fast Path (если ваша версия ОС и СУБД его поддерживают), что позволит ускорить передачу данных внутри сервера.
Помимо устранения «залипаний», проанализируем параметры обслуживания базы данных:
autovacuum_vacuum_scale_factor = 0.01 и autovacuum_analyze_scale_factor = 0.005 для оперативного сбора статистики.Таким образом, мы выяснили, что основной причиной периодических остановок работы является конфликт блокировок файлов статистики PostgreSQL в среде Windows. Использование современных сборок Postgres Pro или переход на PostgreSQL 15+ является наиболее надежным способом обеспечения стабильной работы системы 1С.