В процессе эксплуатации высоконагруженных систем на базе 1С:Предприятие 8.3 в связке с Microsoft SQL Server администраторы часто сталкиваются с внезапными разрывами соединений. Эти сбои сопровождаются специфическими ошибками СУБД, которые парализуют работу пользователей и могут привести к потере несохраненных данных. В данной статье мы подробно разберем причины возникновения таких ошибок, проанализируем ситуацию с разрывом транзакций и рассмотрим комплекс мер по стабилизации работы сервера приложений и сервера баз данных.
Прежде всего, проанализируем характер сообщений, которые выдает система при падении. Чаще всего пользователи видят следующие уведомления:
rphost (рабочим процессом 1С) и SQL-сервером была прервана. Причины могут быть как программными (падение процесса), так и сетевыми.COMMIT), но из-за произошедшего ранее микро-разрыва связи контекст транзакции на стороне SQL Server уже утерян, и сервер «не помнит» о ее начале.#tt) создаются в системной базе tempdb и жестко привязаны к идентификатору сессии SQL. Если соединение обрывается и восстанавливается автоматически, создается новая сессия, в которой старых временных таблиц не существует.Разберем по шагам, какие настройки и проверки необходимо выполнить для устранения этих проблем.
Как показывает практика, одной из самых распространенных причин нестабильности является некорректная настройка параметров кластера серверов 1С. Выясним причину: если рабочие процессы rphost работают слишком долго без перезапуска, в них могут накапливаться утечки памяти или фрагментация адресного пространства, что в конечном итоге приводит к их аварийному завершению.
Рассмотрим порядок настройки кластера через консоль администрирования:
Локальный кластер).86400 секунд (24 часа). Это позволит системе обновлять процессы раз в сутки в момент наименьшей активности.120–300 секунд. Это время, которое дается процессу на «дожитие», чтобы пользователи успели завершить свои текущие операции до того, как старый rphost будет окончательно убит.Такая настройка гарантирует, что процессы будут регулярно обновляться, не допуская критического разрастания потребления ресурсов.
Если сервер приложений 1С и SQL-сервер разнесены физически (например, сервер приложений находится в локальном офисе, а SQL — в дата-центре), стабильность TCP-соединения становится решающим фактором. Разберем, как предотвратить разрывы по инициативе сетевого оборудования или ОС.
Проанализируем настройки сетевых карт на обоих серверах. В современных версиях Windows Server включены механизмы оптимизации, которые могут некорректно работать с длительными сессиями 1С. Рассмотрим команды для отключения этих функций:
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
netsh int tcp set global netdma=disabled
idle. В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters создадим параметр KeepAliveTime (тип DWORD) со значением 300000 (5 минут в миллисекундах).Часто ошибки типа COMMIT TRANSACTION возникают из-за чрезмерного параллелизма SQL Server. Посмотрим на настройку MAXDOP (Max Degree of Parallelism). По умолчанию в SQL Server это значение равно 0, что позволяет серверу использовать все доступные ядра для выполнения одного тяжелого запроса. Для 1С это часто оборачивается взаимными блокировками и сбоями транзакций.
Рассмотрим правильную конфигурацию SQL Server:
Max Degree of Parallelism.1 (для небольших и средних баз) или 2/4 (для очень мощных серверов с десятками ядер). Значение 1 является наиболее безопасным для предотвращения ошибок транзакций в 1С.tempdb. Выясним, достаточно ли места на диске, где она расположена. Рекомендуется разделить tempdb на несколько файлов данных (по количеству ядер процессора, но не более 8) одинакового размера, чтобы избежать конкуренции за системные страницы.Иногда проблема кроется в устаревших компонентах доступа к данным. Ошибка Invalid object name '#tt1' может быть усилена багами в конкретной версии Microsoft SQL Server Native Client. Рассмотрим возможность обновления этого компонента до последней доступной версии для SQL Server 2014 (обычно это Feature Pack с Service Pack 3).
Также не забудем про очистку серверного кэша 1С. Если база данных была перенесена или платформа была обновлена, старые файлы кэша могут вызывать конфликты. Выполним следующие действия:
C:\Program Files\1cv8\srvinfo\reg_1541 (путь может отличаться).snccntx.В завершение проанализируем работу антивирусного ПО. Убедимся, что процессы rphost.exe, sqlservr.exe и папки с данными SQL (.mdf, .ldf) и временными файлами 1С добавлены в исключения. Сканирование файла базы данных в момент записи транзакции гарантированно приведет к ошибке «Соединение непригодно для использования».
Применяя данные рекомендации комплексно, мы сможем добиться стабильной работы системы и полностью избавиться от вылетов пользователей из 1С.