Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Мониторинг и устранение взаимных блокировок (Deadlocks) 1С в Extended Events

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Пользователи 1С получают ошибку «Взаимная блокировка (Deadlock) при выполнении транзакции».
  • Код ошибки СУБД Error 1205: Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim.
  • События TDEADLOCK в технологическом журнале платформы 1С.

1. Создание сессии Extended Events в MS SQL Server

Запустите SQL-скрипт для непрерывного перехвата XML-графов дедлоков:

CREATE EVENT SESSION [Capture_Deadlocks_1C] ON SERVER 
ADD EVENT sqlserver.xml_deadlock_report
ADD TARGET package0.event_file(
    SET filename=N'C:\SQL_Traces\Deadlocks_1C.xel',
    max_file_size=(50),
    max_rollover_files=(10)
)
WITH (STARTUP_STATE=ON);
GO
ALTER EVENT SESSION [Capture_Deadlocks_1C] ON SERVER STATE = START;
GO

2. Настройка технологического журнала 1С для сопоставления контекста

Добавьте секцию в logcfg.xml:

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_Logs\Deadlocks" history="168">
    <event>
      <eq property="name" value="TDEADLOCK"/>
    </event>
    <event>
      <eq property="name" value="TLOCKS"/>
      <eq property="WaitConnections" value="0"/>
    </event>
    <property name="all"/>
  </log>
</config>

3. Анализ графа дедлока

Откройте файл .xel в SSMS. В графе определите:

  • Жертву дедлока (Victim Process);
  • Ресурсы (Key Lock, Page Lock, Table Lock), на которых возник цикл ожидания;
  • Порядок захвата объектов: например, Транзакция 1 блокирует Таблицу А и ждет Таблицу Б, а Транзакция 2 блокирует Б и ждет А.

4. Устранение причин дедлока в коде 1С

Обеспечьте единый порядок блокировки объектов метаданных во всех транзакциях конфигурации (например, всегда сортируйте строки табличной части по номенклатуре перед проведением):

ТабличнаяЧасть.Сортировать("Номенклатура Возр");
Практический опыт инженера: Главное правило предотвращения дедлоков в 1С: все параллельные транзакции должны блокировать общие ресурсы в строго одинаковой последовательности. Если документ А списывает склад 1, а потом 2, то документ Б не должен списывать склад 2, а потом 1.

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

Почему возникает Deadlock в 1С?

Взаимная блокировка возникает, когда две транзакции одновременно пытаются захватить одни и те же ресурсы (таблицы, строки индексов) в разном хронологическом порядке.

Как по имени таблицы в графе дедлока (например, _AccumRg12345) найти объект в 1С?

Используйте функцию 1С: ПолучитьСтруктуруХраненияБазыДанных() или выполните поиск имени таблицы через специальные обработки/скрипты сопоставления метаданных.

Как платформа 1С выбирает жертву дедлока?

Жертву выбирает не 1С, а СУБД (MS SQL Server / PostgreSQL) на основе стоимости отката транзакции (убивается транзакция, выполнившая меньший объем записей в лог).

Помогает ли управляемый режим блокировок полностью избавиться от дедлоков?

Управляемый режим минимизирует дедлоки на уровне СУБД, перенося управление на менеджер блокировок 1С, но при нарушении порядка захвата ресурсов в коде взаимоблокировки все равно возможны.