Как устранить ошибки соединения 1С с SQL Server и предотвратить вылеты рабочих процессов rphost

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

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

Анализ основных симптомов и ошибок СУБД

Прежде всего, проанализируем характер сообщений, которые выдает система при падении. Чаще всего пользователи видят следующие уведомления:

  1. «Соединение с сервером баз данных непригодно для использования после разрыва соединения администратором и будет переустановлено». Это базовое сообщение, которое говорит о том, что сессия между rphost (рабочим процессом 1С) и SQL-сервером была прервана. Причины могут быть как программными (падение процесса), так и сетевыми.
  2. «Microsoft SQL Server Native Client 11.0: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION». Данная ошибка указывает на нарушение логической целостности транзакции. Система пытается зафиксировать изменения (выполнить COMMIT), но из-за произошедшего ранее микро-разрыва связи контекст транзакции на стороне SQL Server уже утерян, и сервер «не помнит» о ее начале.
  3. «Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Invalid object name '#tt1'». Это критическая ошибка, связанная с использованием временных таблиц. В 1С временные таблицы (начинающиеся с префикса #tt) создаются в системной базе tempdb и жестко привязаны к идентификатору сессии SQL. Если соединение обрывается и восстанавливается автоматически, создается новая сессия, в которой старых временных таблиц не существует.

Разберем по шагам, какие настройки и проверки необходимо выполнить для устранения этих проблем.

Решение 1: Настройка перезапуска рабочих процессов в кластере 1С

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

Рассмотрим порядок настройки кластера через консоль администрирования:

  1. Откроем консоль «Администрирование серверов 1С Предприятия».
  2. Перейдем к свойствам нашего кластера (обычно это Локальный кластер).
  3. Проанализируем параметры перезапуска. Если в полях стоит «0», это означает, что автоматический перезапуск отключен, что недопустимо для продуктивных систем.
  4. Установим «Интервал перезапуска». Рекомендуемое значение — 86400 секунд (24 часа). Это позволит системе обновлять процессы раз в сутки в момент наименьшей активности.
  5. Настроим «Допустимый объем памяти». Здесь следует указать значение в байтах (или КБ, в зависимости от версии платформы), при достижении которого процесс будет помечен как «на замену». Рекомендуется устанавливать предел в 80% от общего объема оперативной памяти сервера, деленного на количество рабочих процессов.
  6. Установим «Выключенные процессы завершать через». Поставим значение 120–300 секунд. Это время, которое дается процессу на «дожитие», чтобы пользователи успели завершить свои текущие операции до того, как старый rphost будет окончательно убит.

Такая настройка гарантирует, что процессы будут регулярно обновляться, не допуская критического разрастания потребления ресурсов.

Решение 2: Оптимизация сетевого взаимодействия между серверами

Если сервер приложений 1С и SQL-сервер разнесены физически (например, сервер приложений находится в локальном офисе, а SQL — в дата-центре), стабильность TCP-соединения становится решающим фактором. Разберем, как предотвратить разрывы по инициативе сетевого оборудования или ОС.

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

  1. Откроем командную строку от имени администратора.
  2. Выполним команду для отключения разгрузки TCP:
    
    netsh int tcp set global chimney=disabled
    netsh int tcp set global rss=disabled
    netsh int tcp set global netdma=disabled
    
  3. Настроим параметры KeepAlive в реестре Windows. Это заставит систему чаще проверять активность соединения, не позволяя брандмауэрам закрывать сессию по таймауту idle. В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters создадим параметр KeepAliveTime (тип DWORD) со значением 300000 (5 минут в миллисекундах).

Решение 3: Настройка параметров MS SQL Server для работы с 1С

Часто ошибки типа COMMIT TRANSACTION возникают из-за чрезмерного параллелизма SQL Server. Посмотрим на настройку MAXDOP (Max Degree of Parallelism). По умолчанию в SQL Server это значение равно 0, что позволяет серверу использовать все доступные ядра для выполнения одного тяжелого запроса. Для 1С это часто оборачивается взаимными блокировками и сбоями транзакций.

Рассмотрим правильную конфигурацию SQL Server:

  1. В SQL Server Management Studio (SSMS) зайдем в свойства сервера.
  2. На вкладке «Advanced» найдем параметр Max Degree of Parallelism.
  3. Установим значение 1 (для небольших и средних баз) или 2/4 (для очень мощных серверов с десятками ядер). Значение 1 является наиболее безопасным для предотвращения ошибок транзакций в 1С.
  4. Проверим состояние базы tempdb. Выясним, достаточно ли места на диске, где она расположена. Рекомендуется разделить tempdb на несколько файлов данных (по количеству ядер процессора, но не более 8) одинакового размера, чтобы избежать конкуренции за системные страницы.

Решение 4: Обновление драйверов и очистка кэша

Иногда проблема кроется в устаревших компонентах доступа к данным. Ошибка Invalid object name '#tt1' может быть усилена багами в конкретной версии Microsoft SQL Server Native Client. Рассмотрим возможность обновления этого компонента до последней доступной версии для SQL Server 2014 (обычно это Feature Pack с Service Pack 3).

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

  1. Остановим службу «Agent 1C:Enterprise».
  2. Перейдем в каталог C:\Program Files\1cv8\srvinfo\reg_1541 (путь может отличаться).
  3. Найдем папки с именами GUID ваших баз и удалим внутри них папку snccntx.
  4. Запустим службу заново.

В завершение проанализируем работу антивирусного ПО. Убедимся, что процессы rphost.exe, sqlservr.exe и папки с данными SQL (.mdf, .ldf) и временными файлами 1С добавлены в исключения. Сканирование файла базы данных в момент записи транзакции гарантированно приведет к ошибке «Соединение непригодно для использования».

Применяя данные рекомендации комплексно, мы сможем добиться стабильной работы системы и полностью избавиться от вылетов пользователей из 1С.

← На главную