Как решить проблему зависания баз 1С и бесконечного роста фоновых заданий на SQL Server 2019?

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

При масштабном обновлении инфраструктуры, например, при переходе с Windows Server 2008 и старых версий SQL на современную связку Windows Server 2019 и SQL Server 2019, администраторы часто сталкиваются с критической проблемой. Информационные базы 1С начинают непредсказуемо зависать, при этом в консоли администрирования наблюдается резкий скачок количества фоновых заданий (с нескольких десятков до сотен), а пользователи не могут войти в систему. Мы разберем причины этой ситуации и пошагово рассмотрим методы ее решения.

Проанализируем причины зависаний

Ситуация, когда база «не пускает» пользователя даже до окна ввода логина и пароля, обычно указывает на блокировку на уровне системных ресурсов. Рассмотрим основные факторы, которые провоцируют это состояние:

Решение 1: Тонкая настройка SQL Server 2019

Если мы переносим базы методом отсоединения и присоединения (Attach/Detach), они сохраняют настройки старого сервера, но начинают работать на новом движке. Проанализируем настройки базы данных в SQL Server Management Studio (SSMS). Для корректной работы 1С нам необходимо изменить параметры совместимости.

Выполним следующие SQL-запросы для каждой проблемной базы:


-- Установка уровня совместимости с SQL Server 2016/2017 (иногда помогает стабилизировать планы)
ALTER DATABASE [Имя_Вашей_Базы] SET COMPATIBILITY_LEVEL = 140;
GO

-- Включение старого механизма оценки мощности (Legacy Cardinality Estimation)
-- Это критично для корректной работы запросов 1С на SQL 2019
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
GO

-- Отключение автоматического инлайнинга скалярных функций (может вызывать зависания)
ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = OFF;
GO

Также проверим параметр MAXDOP (Max Degree of Parallelism). В настройках инстанса SQL Server убедимся, что он не равен 0. Для серверов 1С рекомендуется устанавливать значение 1, 2 или 4, чтобы одно тяжелое фоновое задание не захватывало все ядра процессора, вызывая общие ожидания типа CXPACKET.

Решение 2: Оптимизация работы кластера 1С

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

Посмотрим на параметры рабочего сервера в консоли администрирования 1С:

  1. Установим «Предел количества соединений на рабочий процесс». Если у вас много баз, не позволяйте одному процессу rphost обслуживать слишком много соединений. Значение 25-50 поможет изолировать проблемы одной базы от других.
  2. Настроим «Интервал перезапуска» рабочих процессов. Рассмотрим вариант установки значения 86400 (раз в сутки) с ненулевым значением «Выключенные процессы завершать через» (например, 7200 секунд), чтобы старые процессы с утечками памяти корректно уходили из системы.
  3. Как показала практика, в некоторых случаях помогает временное снижение параметров таймингов в консоли, чтобы спровоцировать перезапуск rphost без выкидывания пользователей. Это можно автоматизировать скриптом, который меняет параметры кластера через COM-соединение или AdminShell.

Решение 3: Отключение избыточных функций

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

Рассмотрим, как это сделать программно в коде 1С или через консоль заданий:


// Отключение полнотекстового поиска для всей базы
ПолнотекстовыйПоиск.УстановитьИспользование(Ложь);

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

Решение 4: Работа с журналом регистрации

Проанализируем состояние журналов регистрации. Если вы используете новый формат .lgd, попробуйте перенести папку srvinfo (где хранятся логи) на максимально быстрый диск (SSD/NVMe). Если база продолжает зависать при входе, выполните следующие действия:

Решение 5: Настройка операционной системы Windows Server 2019

Не забудем про настройки самой ОС. Windows Server 2019 имеет ряд особенностей, влияющих на работу сетевого стека 1С:

  1. Отключение IPv6: Агент сервера 1С часто некорректно работает с IPv6, что приводит к задержкам при установке соединений. Рекомендуется полностью отключить IPv6 в свойствах сетевого адаптера и через реестр.
  2. План электропитания: Обязательно установите схему «Высокая производительность» (High Performance). Сбалансированная схема в Windows 2019 часто «паркует» ядра процессора, что вызывает микро-фризы при старте фоновых заданий.
  3. Исключения антивируса: Добавьте в исключения Windows Defender (или стороннего антивируса) процессы ragent.exe, rmngr.exe, rphost.exe, а также папки с данными сервера 1С и каталоги баз SQL.

Подводя итог, можно сказать, что проблема чаще всего носит комплексный характер. Сочетание настройки LEGACY_CARDINALITY_ESTIMATION на SQL сервере и оптимизация количества рабочих процессов в кластере 1С позволяют устранить зависания в 90% случаев. Если проблема сохраняется, рекомендуем обновить платформу 1С до последних патчей внутри ветки (например, перейти на стабильную 8.3.22+), так как в 8.3.18 многие механизмы управления фоновыми заданиями работают нестабильно.

← На главную