Почему зависает сравнение и объединение конфигураций после разделения серверов 1С и SQL и как это исправить?

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

Разделение серверов приложений 1С:Предприятие и систем управления базами данных (СУБД) Microsoft SQL Server на разные физические или виртуальные машины — стандартный шаг при масштабировании ИТ-инфраструктуры предприятия. Однако после такого переезда технические специалисты часто сталкиваются со специфической проблемой: при попытке выполнить сравнение, объединение или обновление конфигурации с конфигурацией поставщика процесс зависает на 0% и не завершается даже спустя несколько суток.

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия платформы 1С и SQL Server при работе по сети, и рассмотрим пошаговые инструкции по устранению данной неисправности.

Причина 1. Ошибка платформы 1С и взаимные блокировки rphost

Основная причина зависания процесса сравнения и объединения конфигураций на определенных релизах платформы (в частности, на ветке 8.3.15, например 8.3.15.1489) кроется в платформенном баге распределения блокировок. При запуске сравнения с конфигурацией поставщика процесс конфигуратора инициирует ресурсоемкую операцию чтения метаданных СУБД. В этот момент рабочий процесс сервера 1С (rphost) устанавливает монопольную блокировку на таблицы конфигурации.

Если на этом же рабочем процессе rphost крутятся сессии других пользователей или регламентные задания из соседних баз данных, возникает ситуация взаимной блокировки (deadlock). Поток конфигуратора уходит в бесконечное ожидание освобождения ресурсов, визуально зависая на 0% выполнения.

Решение проблемы:

  1. Обновление платформы: Самым надежным и долгосрочным решением является обновление технологической платформы 1С до актуальных стабильных релизов (например, ветки 8.3.17, 8.3.22 или выше), где данная проблема с монопольными блокировками при сравнении метаданных была полностью исправлена разработчиками 1С.
  2. Изоляция рабочих процессов: Если оперативное обновление платформы невозможно по организационным причинам (например, из-за круглосуточного производства 24/7), временно изолируем базу данных. Для этого в консоли администрирования кластера серверов 1С установим параметр «Количество ИБ на один процесс» равным 1. Это позволит процессу конфигуратора выполняться в выделенном рабочем процессе rphost, исключая влияние других баз.

Причина 2. Использование Shared Memory на разных серверах

Когда сервер 1С и СУБД MS SQL находятся на одном физическом компьютере, они по умолчанию общаются через высокоскоростной протокол Shared Memory (Общая память). Этот протокол работает напрямую через оперативную память, минуя сетевой стек.

После физического разделения серверов попытка использовать протокол общей памяти приводит к ошибкам или зависаниям, так как сервера больше не имеют доступа к общей RAM. Нам необходимо принудительно отключить неактуальные протоколы и настроить сетевое взаимодействие.

Решение проблемы:

  1. Откроем SQL Server Configuration Manager на сервере базы данных.
  2. Перейдем в раздел SQL Server Network Configuration (Сетевая конфигурация SQL Server) -> Protocols for MSSQLSERVER (Протоколы для MSSQLSERVER).
  3. Проанализируем приоритеты и статус протоколов. Отключим протокол Shared Memory (Общая память) и протокол VIA (при его наличии).
  4. Убедимся, что протокол TCP/IP включен (статус Enabled).
  5. Перезапустим службу SQL Server для применения настроек.

Причина 3. Проблемы сетевого стека и драйверов (TCP Chimney Offload и RSS)

Операция сравнения и объединения конфигураций — это передача гигантских объемов мелких 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

После выполнения команд рекомендуется перезагрузить сетевые адаптеры или операционную систему серверов.

Причина 4. Некорректные настройки параллелизма в MS SQL Server (MAXDOP)

При сравнении тяжелых конфигураций (таких как ERP или Комплексная автоматизация) SQL Server пытается распараллелить построение сложных запросов к метаданным на все доступные ядра процессора. При сетевом взаимодействии это вызывает задержки ожидания потоков друг друга, известные как ожидания типа CXPACKET.

Решение проблемы:

Для стабильной работы баз данных 1С настоятельно рекомендуется ограничить максимальную степень параллелизма (Max Degree of Parallelism). Изменим эту настройку в свойствах SQL Server:

  1. Подключимся к СУБД через SQL Server Management Studio (SSMS).
  2. Нажмем правой кнопкой мыши на имя сервера и выберем Properties (Свойства).
  3. Перейдем на вкладку Advanced (Дополнительно).
  4. Установим значение параметра Max Degree of Parallelism (MAXDOP) равным 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

Причина 5. Блокировки со стороны антивирусного ПО

В процессе сравнения конфигураций сервер 1С производит массовую распаковку сотен тысяч мелких файлов структуры метаданных во временные каталоги операционной системы. Если на сервере 1С установлен антивирус, он начинает сканировать каждый вновь создаваемый во временной папке файл «на лету».

В условиях, когда база данных расположена на другом сервере, задержки дисковых операций из-за антивируса суммируются с сетевыми задержками, что приводит к превышению таймаута транзакции и зависанию конфигуратора.

Решение проблемы:

Добавим в исключения антивирусного сканирования на сервере приложения 1С:

← На главную