Разделение серверов приложений 1С:Предприятие и систем управления базами данных (СУБД) Microsoft SQL Server на разные физические или виртуальные машины — стандартный шаг при масштабировании ИТ-инфраструктуры предприятия. Однако после такого переезда технические специалисты часто сталкиваются со специфической проблемой: при попытке выполнить сравнение, объединение или обновление конфигурации с конфигурацией поставщика процесс зависает на 0% и не завершается даже спустя несколько суток.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия платформы 1С и SQL Server при работе по сети, и рассмотрим пошаговые инструкции по устранению данной неисправности.
Основная причина зависания процесса сравнения и объединения конфигураций на определенных релизах платформы (в частности, на ветке 8.3.15, например 8.3.15.1489) кроется в платформенном баге распределения блокировок. При запуске сравнения с конфигурацией поставщика процесс конфигуратора инициирует ресурсоемкую операцию чтения метаданных СУБД. В этот момент рабочий процесс сервера 1С (rphost) устанавливает монопольную блокировку на таблицы конфигурации.
Если на этом же рабочем процессе rphost крутятся сессии других пользователей или регламентные задания из соседних баз данных, возникает ситуация взаимной блокировки (deadlock). Поток конфигуратора уходит в бесконечное ожидание освобождения ресурсов, визуально зависая на 0% выполнения.
Решение проблемы:
8.3.17, 8.3.22 или выше), где данная проблема с монопольными блокировками при сравнении метаданных была полностью исправлена разработчиками 1С.1. Это позволит процессу конфигуратора выполняться в выделенном рабочем процессе rphost, исключая влияние других баз.Когда сервер 1С и СУБД MS SQL находятся на одном физическом компьютере, они по умолчанию общаются через высокоскоростной протокол Shared Memory (Общая память). Этот протокол работает напрямую через оперативную память, минуя сетевой стек.
После физического разделения серверов попытка использовать протокол общей памяти приводит к ошибкам или зависаниям, так как сервера больше не имеют доступа к общей RAM. Нам необходимо принудительно отключить неактуальные протоколы и настроить сетевое взаимодействие.
Решение проблемы:
Shared Memory (Общая память) и протокол VIA (при его наличии).TCP/IP включен (статус Enabled).Операция сравнения и объединения конфигураций — это передача гигантских объемов мелких XML-данных и бинарных макетов из таблиц Config и ConfigSave СУБД на сервер 1С. Любые микросбои в сетевом оборудовании или операционной системе могут привести к потере пакетов.
Технологии оптимизации сетевых плат, такие как TCP Chimney Offload (разгрузка TCP) и Receive Side Scaling (RSS), часто некорректно обрабатывают специфический трафик 1С, что вызывает незаметное для ОС «зависание» сокета без генерации явных ошибок.
Решение проблемы:
Отключим разгрузку сетевых функций на физических серверах 1С и SQL. Для этого запустим командную строку от имени администратора на обоих серверах и выполним следующие команды:
netsh int tcp set global chimney=disabled
netsh int tcp set global autotuninglevel=normal
netsh int ip set global taskoffload=disabled
После выполнения команд рекомендуется перезагрузить сетевые адаптеры или операционную систему серверов.
При сравнении тяжелых конфигураций (таких как ERP или Комплексная автоматизация) SQL Server пытается распараллелить построение сложных запросов к метаданным на все доступные ядра процессора. При сетевом взаимодействии это вызывает задержки ожидания потоков друг друга, известные как ожидания типа CXPACKET.
Решение проблемы:
Для стабильной работы баз данных 1С настоятельно рекомендуется ограничить максимальную степень параллелизма (Max Degree of Parallelism). Изменим эту настройку в свойствах SQL Server:
1 (для баз средней величины) или 2-4 (в зависимости от количества процессоров, но не более половины ядер на один сокет).Для изменения настройки через скрипт выполним следующий запрос:
USE master;
GO
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'max degree of parallelism', 1;
RECONFIGURE;
GO
В процессе сравнения конфигураций сервер 1С производит массовую распаковку сотен тысяч мелких файлов структуры метаданных во временные каталоги операционной системы. Если на сервере 1С установлен антивирус, он начинает сканировать каждый вновь создаваемый во временной папке файл «на лету».
В условиях, когда база данных расположена на другом сервере, задержки дисковых операций из-за антивируса суммируются с сетевыми задержками, что приводит к превышению таймаута транзакции и зависанию конфигуратора.
Решение проблемы:
Добавим в исключения антивирусного сканирования на сервере приложения 1С:
C:\Program Files\1cv8\ или C:\Program Files (x86)\1cv8\).%TEMP% и %TMP%) учетной записи, под которой запущена служба сервера 1С (обычно это локальный пользователь USR1CV8 или системная учетная запись SYSTEM).C:\srvinfo\).