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

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

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

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

Мониторинг и устранение взаимных блокировок (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С, но при нарушении порядка захвата ресурсов в коде взаимоблокировки все равно возможны.

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