Ситуация, когда в конфигуратор 1С вход выполняется без проблем, а при запуске пользовательского сеанса программа наглухо зависает сразу после ввода логина и пароля, является распространенной проблемой в клиент-серверном варианте работы. Характерный симптом — временное исчезновение проблемы после восстановления базы из резервной копии SQL с последующим возвратом зависаний при авторизации или проведении документов. Разберем по шагам, почему возникает такое поведение информационной базы и как полностью устранить неисправность.
Одной из частых причин внезапного зависания пользовательских сеансов является выполнение динамического обновления конфигурации или появление неоптимального программного кода в процедурах инициализации системы. Рассмотрим, как локализовать проблему на уровне платформы 1С:
F5. Если в модуле управляемого приложения или в модуле обычного приложения (в процедурах ПриНачалеРаботыСистемы, ПередНачаломРаботыСистемы) выполняется тяжелый циклический запрос или обращение к заблокированной таблице, замер покажет строку с наибольшим временем выполнения..cf: сохраним конфигурацию в файл через Конфигурация - Сохранить конфигурацию в файл, снимем признак изменений и загрузим его обратно через Конфигурация - Загрузить конфигурацию из файла.Если восстановление базы из бэкапа SQL временно решает проблему, но через несколько часов или дней база снова виснет при входе и проведении документов, первопричина почти всегда кроется в механизмах СУБД. При восстановлении бэкапа кэш планов запросов SQL Server очищается. По мере работы накапливается неактуальная статистика, что приводит к эффекту Parameter Sniffing: SQL Server выбирает катастрофически неэффективный план выполнения (например, полное сканирование таблицы Table Scan вместо поиска по индексу Index Seek).
Для исправления ситуации выполним регламентные процедуры на стороне СУБД:
USE [Имя_Базы_1С];
EXEC sp_updatestats;
DBCC CHECKDB ('Имя_Базы_1С') WITH NO_INFOMSGS, ALL_ERRORMSGS;
При авторизации пользователя платформа 1С обращается к служебным таблицам настроек, констант, прав доступа и журнала регистрации. Если фоновое задание или другой сеанс удерживает исключительную блокировку на этих ресурсах, все новые подключения выстраиваются в бесконечную очередь ожиданий.
Проанализируем блокировки в момент зависания входа:
SELECT
r.session_id,
r.blocking_session_id,
r.wait_type,
r.wait_time,
r.wait_resource,
t.text AS QueryText
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0 OR r.session_id IN (SELECT blocking_session_id FROM sys.dm_exec_requests);
rphost. Если пользователи смогли беспрепятственно войти в систему, значит, одно из фоновых заданий (например, пересчет итогов или обновление индекса полнотекстового поиска) захватывало общие ресурсы.Если стандартные действия не помогли точно определить источник зависания, настроим технологический журнал платформы 1С для отслеживания длительных операций и взаимоблокировок при старте сеанса. Создадим файл logcfg.xml в каталоге conf платформы 1С следующего содержания:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="false"/>
<log location="C:\1C_Logs\HangDump" history="4">
<event>
<eq property="name" value="SDBL"/>
</event>
<event>
<eq property="name" value="TLOCK"/>
</event>
<event>
<eq property="name" value="CALL"/>
<ge property="Duration" value="5000000"/>
</event>
<property name="all"/>
</log>
</config>
Запустим сеанс пользователя, дождемся зависания на этапе ввода пароля и выдержим паузу в 3–5 минут. В собранных логах проанализируем события TLOCK (управляемые блокировки) и CALL с длительностью более 5 секунд, чтобы увидеть конкретный контекст встроенного языка и текст SQL-запроса, на котором останавливается выполнение.
Для предотвращения повторного проявления зависаний проверим общесистемные параметры инфраструктуры:
tempdb на несколько файлов данных одинакового размера (по количеству физических ядер процессора, но не более 8), чтобы исключить конкуренцию потоков при формировании временных таблиц 1С..mdf и .ldf. Установим фиксированный шаг расширения (например, 512 МБ или 1024 МБ), чтобы исключить зависания при росте журнала транзакций.ragent.exe, rmngr.exe, rphost.exe, sqlservr.exe и рабочий каталог кластера srvinfo в список исключений антивирусного монитора для предотвращения блокировки дескрипторов файлов сеансов.