Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

MSSQL_ERROR_1205 1С:Предприятие и СУБД

MSSQL Error 1205: Deadlock victim — Анализ и устранение взаимоблокировок 1С

Обновлено: 25.08.2026 · Официальная документация ↗

Ошибка 1205 генерируется встроенным монитором взаимоблокировок SQL Server (Deadlock Monitor), когда две или более сессии взаимно блокируют доступ к ресурсам (строки таблиц, страницы, ключи индексов), образуя циклическую зависимость. СУБД принудительно прерывает одну из сессий (жертву).

  • Сообщение: Transaction (Process ID %d) was deadlocked on %ls resources with another process and has been chosen as the deadlock victim. Rerun the transaction (Severity 13).
  • Пользователи 1С получают сообщение: Конфликт блокировок при выполнении транзакции. Транзакция отменена.
  • Массовые сбои при одновременном проведении документов реализации, списания остатков и начисления зарплаты.

1. Настройка сессии Extended Events для автоматического сбора XML-графов дедлоков

CREATE EVENT SESSION [Capture_Deadlocks] ON SERVER 
ADD EVENT sqlserver.xml_deadlock_report
ADD TARGET package0.event_file(SET filename=N'D:\MSSQL\Logs\Deadlocks.xel', max_file_size=50, max_rollover_files=5)
WITH (STARTUP_STATE=ON);
GO
ALTER EVENT SESSION [Capture_Deadlocks] ON SERVER STATE = START;
GO

2. Извлечение и чтение графов дедлоков из системной сессии system_health

SELECT 
    XEvent.value('(event/@timestamp)[1]', 'datetime2') AS [DeadlockTime],
    XEvent.query('(event/data[@name="xml_report"]/value/deadlock)[1]') AS [DeadlockGraph]
FROM (
    SELECT CAST(target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets st
    JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address
    WHERE s.name = 'system_health' AND st.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(XEvent);

3. Идентификация таблиц 1С по шестнадцатеричным именам

В XML графе дедлока найдите имя объекта (например, _Document123 или _AccRG456) и сопоставьте его с метаданными 1С через функцию ПолучитьСтруктуруХраненияБазыДанных() в 1С или запрос:

-- Поиск физической таблицы в SQL
SELECT OBJECT_NAME(object_id) AS TableName 
FROM sys.partitions 
WHERE hobt_id = 72057594041139200; -- Значение hobtid из графа дедлока

4. Методы устранения взаимоблокировок

  • Управляемые блокировки 1С: Убедитесь, что конфигурация переведена в режим Управляемый (Managed Locks), исключающий автоматические эскалации блокировок MSSQL.
  • Единый порядок захвата ресурсов: Гарантируйте проведение документов и обращение к регистрам в одинаковом алфавитном/ключевом порядке во всех модулях конфигурации 1С.
  • Включение RCSI (Read Committed Snapshot Isolation) для устранения конфликтов между чтением и записью:
ALTER DATABASE [YourDatabaseName] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [YourDatabaseName] SET ALLOW_SNAPSHOT_ISOLATION ON;
💡 Практика специалистов: Для баз данных 1С:Предприятие 8.3 использование режима RCSI является стандартом архитектуры. Перед включением RCSI убедитесь, что накопители под tempdb обладают высокой скоростью случайной записи IOPS.

Частые вопросы (FAQ)

По какому принципу SQL Server выбирает жертву дедлока (Victim)?

СУБД выбирает процесс с наименьшим приоритетом DEADLOCK_PRIORITY. Если приоритеты равны, жертвой становится транзакция, откат которой требует наименьших затрат ресурсов процессора и журнала (наименьший объем сгенерированного лога).

Помогает ли увеличение оперативной памяти или ядер CPU от дедлоков?

Нет. Взаимоблокировка — это алгоритмическая проблема логики кода и порядка захвата ресурсов транзакциями. Более быстрый CPU лишь увеличивает частоту возникновения коллизий при параллельной работе.

Что такое RCSI и решает ли он проблему дедлоков в 1С?

Режим Read Committed Snapshot Isolation (RCSI) предотвращает блокировку читающих запросов пишущими, сохраняя старые версии строк в tempdb. Это полностью устраняет дедлоки вида 'Чтение-Запись'.

Как включить флаг трассировки 1222 для вывода дедлоков в лог?

Выполните: DBCC TRACEON (1222, -1);. Информация о структуре взаимоблокировок начнет подробно записываться в стандартный SQL Server ERRORLOG.

Полезные материалы
Рекомендуем