Каждый системный администратор и специалист 1С рано или поздно сталкивается с ситуацией, когда при запуске клиентского приложения 1С:Предприятие на рабочем компьютере пользователя процесс намертво зависает на этапе «Загрузка конфигурационной информации». При этом, если зайти на сервер через удаленный рабочий стол (RDP) и запустить 1С в терминальной сессии, программа открывается мгновенно и работает без каких-либо нареканий. Давайте разберем эту проблему по шагам, проанализируем причины ее возникновения и рассмотрим наиболее эффективные методы ее решения.
Для того чтобы понять, где именно происходит сбой, нам необходимо проанализировать архитектуру взаимодействия клиента и сервера. Когда мы запускаем 1С внутри терминальной сессии на сервере, клиентское приложение и сервер СУБД (например, MS SQL Server) физически находятся на одной машине. В этом случае для обмена данными используется сверхбыстрый протокол Shared Memory (общая память), который работает напрямую через оперативную память сервера, минуя сетевые протоколы и сетевые адаптеры.
Когда же пользователь запускает 1С со своего локального персонального компьютера, взаимодействие происходит по сети через протокол TCP/IP. На этапе «Загрузка конфигурационной информации» платформа скачивает с сервера метаданные конфигурации (таблицы Config и ConfigSave). Объем этих данных может составлять от нескольких десятков до сотен мегабайт. Любые микросбои в сети, проблемы с фрагментацией пакетов, неоптимальные планы запросов СУБД или задержки сетевой карты приводят к тому, что передача этого огромного массива мелких пакетов зависает.
Рассмотрим подробнее основные способы решения этой проблемы, начиная с наиболее действенных.
Как показывает практика, очень часто корень проблемы кроется в некорректной работе оптимизатора запросов MS SQL Server. В версиях SQL Server 2016 (особенно до пакета обновлений Service Pack 2, например, на накопительном обновлении CU8) присутствовал критический баг в новом оптимизаторе запросов (Cardinality Estimator). Он строил неверные планы выполнения для тяжелых запросов к системным таблицам метаданных 1С. В результате СУБД тратила колоссальное количество времени на обработку запроса конфигурации, из-за чего клиент на ПК уходил в бесконечное ожидание.
Для исправления этой ситуации выполним следующие шаги:
Для активации старого оптимизатора выполните в среде SQL Server Management Studio (SSMS) следующий T-SQL запрос:
ALTER DATABASE [Имя_Вашей_Базы_1С]
SET COMPATIBILITY_LEVEL = 130;
GO
ALTER DATABASE SCOPED CONFIGURATION
SET LEGACY_CARDINALITY_ESTIMATION = ON;
GO
Этот простой шаг в большинстве случаев мгновенно решает проблему «зависания» клиента на этапе старта. Для комплексной проверки параметров базы данных и выявления проблем с конфигурацией сервера подойдёт инструмент для аудита настроек СУБД под 1С.
Если СУБД обновлена, но зависание продолжается, нам необходимо проанализировать сетевые настройки. При передаче больших объемов конфигурационных данных сетевые карты серверов часто пытаются оптимизировать трафик с помощью аппаратных функций разгрузки процессора. К сожалению, эти технологии (особенно на виртуальных машинах Hyper-V или VMware) часто работают некорректно, вызывая потерю и искажение TCP-пакетов.
Выполните следующие настройки на сетевом адаптере сервера приложений 1С и сервера СУБД:
Отключение этих опций перекладывает расчет контрольных сумм и фрагментацию пакетов на центральный процессор, что полностью устраняет скрытые сетевые задержки при скачивании метаданных 1С.
Иногда файлы платформы 1С:Предприятие на локальном компьютере пользователя могут быть повреждены, либо кэш конфигурации содержит некорректные или устаревшие структуры данных. Обычной очистки кэша через удаление базы из списка может быть недостаточно. Для автоматизации этого процесса можно использовать скрипт для быстрой очистки пользовательского кэша 1С.
Проанализируем правильный алгоритм глубокой очистки и переустановки:
%userprofile%\AppData\Local\1C\1cv8%userprofile%\AppData\Roaming\1C\1cv8Мало кто знает, но именно на этапе «Загрузка конфигурационной информации» платформа 1С производит финальное закрепление и проверку лицензии HASP. Если файл nethasp.ini на локальном компьютере не настроен, платформа начинает сканировать локальную сеть широковещательными запросами (broadcast) по всем доступным сетевым адаптерам (включая виртуальные адаптеры VPN, VirtualBox и т.д.). Этот процесс может затягивать запуск программы на 5–15 минут, имитируя зависание.
Чтобы избежать этого, настройте файл конфигурации лицензий. Найдите файл nethasp.ini (обычно он находится в папке C:\Program Files\1cv8\conf\ или в папке конкретной версии платформы) и приведите его секцию TCP/IP к следующему виду, жестко указав IP-адрес вашего сервера лицензирования:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.3.10 ; Укажите здесь реальный IP вашего сервера лицензий
NH_PORT_NUMBER = 475
NH_USE_BROADCAST = Disabled
Отключение широковещательного поиска (NH_USE_BROADCAST = Disabled) заставит 1С мгновенно обращаться по конкретному IP-адресу, исключая сетевые таймауты при старте.
Если зависание происходит периодически у разных пользователей, велика вероятность того, что таблицы метаданных конфигурации заблокированы незавершенной транзакцией другого пользователя (например, при прерванном динамическом обновлении или зависшем фоновом задании). Новые сеансы пытаются прочитать таблицу Config, но выстраиваются в очередь ожидания блокировки.
Чтобы выявить эту проблему, проанализируем состояние транзакций в MS SQL Server с помощью системной процедуры:
USE master;
GO
EXEC sp_who2;
GO
В колонке BlkBy (Blocked By) обратите внимание на наличие номеров процессов (SPID). Если вы обнаружили процесс, который блокирует остальные сессии (например, процесс с номером 72), детально изучите его и при необходимости завершите командой KILL 72 или выполните перезапуск службы «Агент сервера 1С:Предприятие».
Применяя комплексный подход — от обновления СУБД до точечной настройки сетевых параметров и оптимизации поиска лицензий, мы гарантированно избавимся от проблемы долгого запуска 1С и обеспечим стабильную работу системы для всех пользователей сети.