Deadlock на ведущих измерениях

15.08.24

База данных - HighLoad оптимизация

Описание примера дедлока захвата ресурсов в разном порядке на ведущих измерениях.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Deadlock на ведущих измерениях:
.zip 951,53Kb
3
3 Скачать бесплатно

При обновлении конфигурации Модуль 1С:CRM 3 (3.1.26.10) + 1С:ERP Управление предприятием 2  (2.5.12.270) на версию Модуль 1С:CRM 3 (3.1.29.16) + 1С:ERP Управление предприятием 2  (2.5.17.110) один из обработчиков обновления, а именно ЗаданияКРаспределениюРасчетов отваливается с ошибкой «Неустранимый конфликт блокировок», настройка ТЖ дала информацию о том, что проблема возникает на пространстве InfoRg84500.DIMS Exclusive это соответствует РС CRM_ОчередьОтложенногоВыполненияТриггеров. Блокировка 1С, что видно по тому что TDEADLOCK ловится в технологическом журнале.

Контест блокировки ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();' – это удаление неиспользуемых регистраторов расчета.

Конфликтующие TLOCK также связаны с этим контекстом.

Казалось бы, при чем тут триггеры CRM и регистратор расчета? Никаких подписок на события, чтобы писали в этот регистр нет, стек вызова по точке останова выдает тот же самый контекст ДокументОбъект.Удалить().

Регистр CRM_ОчередьОтложенногоВыполненияТриггеров имеет следующую структуру:

 

 

(на самом деле ссылка не совсем любая ссылка, но почти любая)

 

 

Особенность ведущего измерения заключается в том, что при удалении объекта все записи регистра сведений по этому объекту тоже будут автоматически удалены. Теперь, по крайней мере, понятно, почему при удалении объекта идет запись в этот регистр— это происходит из-за почти любой ссылки. То есть, при удалении ссылочного объекта, он будет записывать набор записей в этот регистр.

Но как же получается дедлок? Полазив с отладчиком можно заметить, что в рамках одной транзакции в процедуру «ПередЗаписью» модуля набора записи CRM_ОчередьОтложенногоВыполненияТриггеров программа залезает 2 раза сначала записываются данные с отбором по ОбъектДействия равным удаляемому регистратору расчета, а затем по отбору ОбъектТриггера равным удаляемому регистратору расчета из-за того, что оба они являются ведущими.

Рассмотрим две параллельные транзакции:

  1. Первая транзакция накладывает блокировку 1С на ОбъектДействия по РегиструРасчета 1, при этом блокируя все записи, у которых ОбъектДействия = РегиструРасчета 1, включая «виртуальные» записи, например, где ОбъектТриггера равен РегиструРасчета 2.
  2. Вторая транзакция накладывает блокировку 1С на ОбъектДействия по РегиструРасчета 2, при этом блокируя все записи, у которых ОбъектДействия = РегиструРасчета 2, включая «виртуальные» записи, например, где ОбъектТриггера равен РегиструРасчета 1.

Они не пересекаются, потому что ОбъектДействия разный. Блокировки устанавливаются, а потом первая транзакция пытается записать набор данных с другим отбором, где ОбъектТриггера равен РегиструРасчета 1, но не может, так как эта запись заблокирована второй транзакцией. Аналогично, вторая транзакция пытается записать с отбором, где ОбъектТриггера равен РегиструРасчета 2, но не может, потому что запись заблокирована первой транзакцией.

Получаем дедлок типа захват ресурсов в разном порядке.

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

В нашем случае я могу смело убрать свойство «ведущее» у ОбъектТриггера, на всякий случай проиндексировав его, чтобы это не сказалось на быстродействии. У нас этот регистр мало используется. После проделанных выше операций, процессы удаления объектов стали идти параллельно, дедлок больше не воспроизводится.

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.17.103

DEADLOCK блокировки взаимоблокировки дедлок оптимизация.

См. также

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9255    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5094    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7571    vasilev2015    20    

42

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12416    241    ZAOSTG    80    

115

HighLoad оптимизация Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5668    glassman    18    

40

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    14008    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gzharkoj 520 15.08.24 18:44 Сейчас в теме
Неожиданные связи, интересно получилось =)
Кажется, что происходит скорее так:
1. Когда удаление происходит по набору с отбором только по ОбъектДействия = РегиструРасчета1 и по ОбъектДействия = РегиструРасчета 2, то они не совместимы, так как пересекаются по оставшимся двум измерениям (по ним отбора нет). И эти действия произойдут последовательно, но дальше не было бы дедлока, только возможен таймаут. Значит тут скорее всего заполнены измерения так, что наборы не пересекаются по измерениям.
2. Когда код доберется до второго удаления, там наборы не совместимы по пространству блокировок и будут требовать пересекающие ресурсы у менеджера управляемых блокировок. Тут все усугубляется тем, что там не две записи параллельно происходят, а столько сколько указано фоновых заданий распределения взаиморасчетов и вот тут уже начинается гонка и проблемы из-за избыточных блокировок.
Посмотреть бы записи тех журнала, стало бы понятно.
4. azazana 78 16.08.24 07:27 Сейчас в теме
(1) 1. Нет, не похоже что так, поэтому и речь в книжках идет о "пространстве" блокировок, он не блокирует конкретные записи, а именно пространства. В нашем регистре вообще всего с десяток записей и в нем нет ни одной записи с регистратором расчета.
6. azazana 78 16.08.24 08:04 Сейчас в теме
(1) Добавила к публикации файл с технологическом журналом
Прикрепленные файлы:
24081607.zip
2. PerlAmutor 155 15.08.24 19:15 Сейчас в теме
Я тут на днях словил кучу дедлоков при переходе на Онлайн Взаиморасчеты, лишь потому, что решил ускорить этот процесс выставив MAXDOP = 5. После того как вернулся в 1, дедлоки пропали.
3. bugagashenka 203 16.08.24 06:15 Сейчас в теме
А можно из ТЖ Полный текст TDEADLOCK и связанные тлоки?
5. azazana 78 16.08.24 08:03 Сейчас в теме
(3) Добавила к публикации файл с технологическом журналом. Еще сылка ниже.
Прикрепленные файлы:
24081607.zip
7. azazana 78 16.08.24 08:52 Сейчас в теме
(3) Вот


rphost_5272/24081607 — копия.log:50:46.588011-11190630,TLOCK,4,process=rphost,p:processName=erp_update,OSThread=2668,t:clientID=34300,t:applicationName=BackgroundJob,t:computerName=srv-sql-ls,t:connectID=10917672,
SessionID=144,Usr=DefUser,DBMS=DBMSSQL,DataBase=SRV-SQL-HA-2\erp_update2,Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84503=1314:87a300620b067a1b11ef322601f83d87',
WaitConnections=10917676,connectionID=20272040-7a50-4a2a-8bc2-ef9fd49cef5e,Context='
rphost_5272/24081607 — копия.log-ОбщийМодуль.ДлительныеОперации.Модуль : 1813 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
rphost_5272/24081607 — копия.log-       ОбщийМодуль.ДлительныеОперации.Модуль : 1853 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
rphost_5272/24081607 — копия.log-               ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                        : 1 : ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
rphost_5272/24081607 — копия.log-                               ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль : 5261 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
rphost_5272/24081607 — копия.log-                                       ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                                                : 1 : РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
rphost_5272/24081607 — копия.log-                                                       РегистрСведений.ЗаданияКРаспределениюРасчетов.МодульМенеджера : 452 : ОперативныеВзаиморасчетыСервер.ВыполнитьОтложенноеРаспределение(Новый Структура("ДанныеКОбработке", ПорцияДанныхКОбработке));
rphost_5272/24081607 — копия.log-                                                               ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 5763 : ЗаполнитьОперативныеВзаиморасчетыПоТаблице(ПараметрыРаспределения);
rphost_5272/24081607 — копия.log-                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 2171 : ЗаполнитьОперативныеВзаиморасчеты(ТаблицаРасчета, ДополнительныеСвойства);
rphost_5272/24081607 — копия.log-                                                                               ПроектКами ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 4483 : УдалитьНеиспользуемыеРегистраторыРасчетов(Запрос, ИмяРегистраРасчетов, ИмяРегистраПланаОплат, ИмяРегистраПланаОтгрузкиПоставки);
rphost_5272/24081607 — копия.log-                                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'



rphost_5272/24081607 — копия.log:50:46.603160-41,TLOCK,4,process=rphost,p:processName=erp_update,OSThread=2668,t:clientID=34300,t:applicationName=BackgroundJob,t:computerName=srv-sql-ls,t:connectID=10917672,
SessionID=144,Usr=DefUser,DBMS=DBMSSQL,DataBase=SRV-SQL-HA-2\erp_update2,Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84502=1314:87a300620b067a1b11ef322601f83d87',
WaitConnections=10917673,Context='
rphost_5272/24081607 — копия.log-ОбщийМодуль.ДлительныеОперации.Модуль : 1813 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
rphost_5272/24081607 — копия.log-       ОбщийМодуль.ДлительныеОперации.Модуль : 1853 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
rphost_5272/24081607 — копия.log-               ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                        : 1 : ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
rphost_5272/24081607 — копия.log-                               ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль : 5261 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
rphost_5272/24081607 — копия.log-                                       ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                                                : 1 : РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
rphost_5272/24081607 — копия.log-                                                       РегистрСведений.ЗаданияКРаспределениюРасчетов.МодульМенеджера : 452 : ОперативныеВзаиморасчетыСервер.ВыполнитьОтложенноеРаспределение(Новый Структура("ДанныеКОбработке", ПорцияДанныхКОбработке));
rphost_5272/24081607 — копия.log-                                                               ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 5763 : ЗаполнитьОперативныеВзаиморасчетыПоТаблице(ПараметрыРаспределения);
rphost_5272/24081607 — копия.log-                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 2171 : ЗаполнитьОперативныеВзаиморасчеты(ТаблицаРасчета, ДополнительныеСвойства);
rphost_5272/24081607 — копия.log-                                                                               ПроектКами ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 4483 : УдалитьНеиспользуемыеРегистраторыРасчетов(Запрос, ИмяРегистраРасчетов, ИмяРегистраПланаОплат, ИмяРегистраПланаОтгрузкиПоставки);
rphost_5272/24081607 — копия.log-                                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'


rphost_5272/24081607 — копия.log:50:46.619047-9205977,TLOCK,4,process=rphost,p:processName=erp_update,OSThread=29288,t:clientID=34323,t:applicationName=BackgroundJob,t:computerName=srv-sql-ls,t:connectID=10917695,
SessionID=167,Usr=DefUser,DBMS=DBMSSQL,DataBase=SRV-SQL-HA-2\erp_update2,Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84503=1314:879c00620b067a1a11eeb4268d1266b7',
WaitConnections=10917676,connectionID=1f7193ef-6264-422d-984f-d91f7c367fab,Context='
rphost_5272/24081607 — копия.log-ОбщийМодуль.ДлительныеОперации.Модуль : 1813 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
rphost_5272/24081607 — копия.log-       ОбщийМодуль.ДлительныеОперации.Модуль : 1853 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
rphost_5272/24081607 — копия.log-               ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                        : 1 : ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
rphost_5272/24081607 — копия.log-                               ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль : 5261 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
rphost_5272/24081607 — копия.log-                                       ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                                                : 1 : РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
rphost_5272/24081607 — копия.log-                                                       РегистрСведений.ЗаданияКРаспределениюРасчетов.МодульМенеджера : 452 : ОперативныеВзаиморасчетыСервер.ВыполнитьОтложенноеРаспределение(Новый Структура("ДанныеКОбработке", ПорцияДанныхКОбработке));
rphost_5272/24081607 — копия.log-                                                               ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 5763 : ЗаполнитьОперативныеВзаиморасчетыПоТаблице(ПараметрыРаспределения);
rphost_5272/24081607 — копия.log-                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 2171 : ЗаполнитьОперативныеВзаиморасчеты(ТаблицаРасчета, ДополнительныеСвойства);
rphost_5272/24081607 — копия.log-                                                                               ПроектКами ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 4483 : УдалитьНеиспользуемыеРегистраторыРасчетов(Запрос, ИмяРегистраРасчетов, ИмяРегистраПланаОплат, ИмяРегистраПланаОтгрузкиПоставки);
rphost_5272/24081607 — копия.log-                                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'


rphost_5272/24081607 — копия.log:50:46.666034-0,TDEADLOCK,5,process=rphost,p:processName=erp_update,OSThread=29288,t:clientID=34323,t:applicationName=BackgroundJob,t:computerName=srv-sql-ls,t:connectID=10917695,
SessionID=167,Usr=DefUser,DBMS=DBMSSQL,DataBase=SRV-SQL-HA-2\erp_update2,
DeadlockConnectionIntersections='10917695 10917672 InfoRg84500.DIMS Exclusive Fld2778=0 Fld84502=1314:879c00620b067a1a11eeb4268d1266b7 Fld84503=1314:87a300620b067a1b11ef322601f83d87,10917672 10917695 
InfoRg84500.DIMS Exclusive Fld2778=0 Fld84502=1314:87a300620b067a1b11ef322601f83d87 Fld84503=1314:879c00620b067a1a11eeb4268d1266b7',Context='
rphost_5272/24081607 — копия.log-ОбщийМодуль.ДлительныеОперации.Модуль : 1813 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
rphost_5272/24081607 — копия.log-       ОбщийМодуль.ДлительныеОперации.Модуль : 1853 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
rphost_5272/24081607 — копия.log-               ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                        : 1 : ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
rphost_5272/24081607 — копия.log-                               ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль : 5261 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
rphost_5272/24081607 — копия.log-                                       ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                                                : 1 : РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
rphost_5272/24081607 — копия.log-                                                       РегистрСведений.ЗаданияКРаспределениюРасчетов.МодульМенеджера : 452 : ОперативныеВзаиморасчетыСервер.ВыполнитьОтложенноеРаспределение(Новый Структура("ДанныеКОбработке", ПорцияДанныхКОбработке));
rphost_5272/24081607 — копия.log-                                                               ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 5763 : ЗаполнитьОперативныеВзаиморасчетыПоТаблице(ПараметрыРаспределения);
rphost_5272/24081607 — копия.log-                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 2171 : ЗаполнитьОперативныеВзаиморасчеты(ТаблицаРасчета, ДополнительныеСвойства);
rphost_5272/24081607 — копия.log-                                                                               ПроектКами ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 4483 : УдалитьНеиспользуемыеРегистраторыРасчетов(Запрос, ИмяРегистраРасчетов, ИмяРегистраПланаОплат, ИмяРегистраПланаОтгрузкиПоставки);
rphost_5272/24081607 — копия.log-                                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'


rphost_5272/24081607 — копия.log:50:46.666042-12,TLOCK,4,process=rphost,p:processName=erp_update,OSThread=29288,t:clientID=34323,t:applicationName=BackgroundJob,t:computerName=srv-sql-ls,t:connectID=10917695,
SessionID=167,Usr=DefUser,DBMS=DBMSSQL,DataBase=SRV-SQL-HA-2\erp_update2,Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84502=1314:879c00620b067a1a11eeb4268d1266b7',
WaitConnections=10917672,Context='
rphost_5272/24081607 — копия.log-ОбщийМодуль.ДлительныеОперации.Модуль : 1813 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
rphost_5272/24081607 — копия.log-       ОбщийМодуль.ДлительныеОперации.Модуль : 1853 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
rphost_5272/24081607 — копия.log-               ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                        : 1 : ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
rphost_5272/24081607 — копия.log-                               ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль : 5261 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
rphost_5272/24081607 — копия.log-                                       ОбщийМодуль.ОбщегоНазначения.Модуль : 6087 : Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
rphost_5272/24081607 — копия.log-                                                : 1 : РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
rphost_5272/24081607 — копия.log-                                                       РегистрСведений.ЗаданияКРаспределениюРасчетов.МодульМенеджера : 452 : ОперативныеВзаиморасчетыСервер.ВыполнитьОтложенноеРаспределение(Новый Структура("ДанныеКОбработке", ПорцияДанныхКОбработке));
rphost_5272/24081607 — копия.log-                                                               ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 5763 : ЗаполнитьОперативныеВзаиморасчетыПоТаблице(ПараметрыРаспределения);
rphost_5272/24081607 — копия.log-                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 2171 : ЗаполнитьОперативныеВзаиморасчеты(ТаблицаРасчета, ДополнительныеСвойства);
rphost_5272/24081607 — копия.log-                                                                               ПроектКами ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 4483 : УдалитьНеиспользуемыеРегистраторыРасчетов(Запрос, ИмяРегистраРасчетов, ИмяРегистраПланаОплат, ИмяРегистраПланаОтгрузкиПоставки);
rphost_5272/24081607 — копия.log-                                                                                       ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'
Показать
8. gzharkoj 520 16.08.24 14:04 Сейчас в теме
Получается такая штука, берем первый deadlock, где указано, что по измерениям Fld2778, Fld84502 и Fld84502 идут пересечени и между двумя соединениями 10917674 и 10917673
50:46.603120-0,TDEADLOCK,5,
t:connectID=10917674
DeadlockConnectionIntersections='10917674 10917673 
InfoRg84500.DIMS Exclusive 
Fld2778=0 
Fld84502=1314:aa4eb49691cad9af11ee367fc8c8d4fd 
Fld84503=1314:aa4eb49691cad9af11ee3672998e1bf0,
10917673 10917674 
InfoRg84500.DIMS Exclusive 
Fld2778=0 
Fld84502=1314:aa4eb49691cad9af11ee3672998e1bf0 
Fld84503=1314:aa4eb49691cad9af11ee367fc8c8d4fd',Context='...
ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'
Показать


Перед deadlock два tlock этих соединений, ожидающих 10 сек, у них отбор только по измерениям Fld2778,Fld84503. По одну измерению они пересекаются. Оба сеанса ждут сеанс - 10917676, который блокирует пространство по 2 из 3-х измерений.
50:46.588021-10283833,TLOCK t:connectID=10917673
InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive 
Fld2778=0 
Fld84503=1314:aa4eb49691cad9af11ee3672998e1bf0'
,WaitConnections=10917676,connectionID=311bfb22-8115-4ef3-b1a1-c1bcc8f1a6a8,
Context='ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'

50:46.588024-10424850,TLOCK t:connectID=10917674
Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive 
Fld2778=0 
Fld84503=1314:aa4eb49691cad9af11ee367fc8c8d4fd',WaitConnections=10917676
ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль : 13127 : ДокументОбъект.Удалить();'
Показать


Сеанс 10917676 заканчивает в 50:46.557029 и возникает первый дедлок, между двумя сеансами. Тут точно захавт ресурсов в разном порядке, только не на одном регистре InfoRg84500, а раньше чистятся регистры накопления и с их блокировкой по регистратору проблем нет.
Тут как я и писал из-за InfoRg84500 задания выстраиваются в очередь, то есть не работают параллельно, но мощности хватает чтобы все сделать. tlock максимум показывает 12 сек ожидания, до таймаута всего 8 сек.
9. gzharkoj 520 16.08.24 19:07 Сейчас в теме
Все-таки у вас верно написано! На одном объекте InfoRg84500, захват в разном порядке. Сначала обоим удается наложить блокировку только по полю Fld84503, а затем они же пытаются наложить блокировку только по полю Fld84502, отсюда и возникает пересечение, так как требуют все значения Fld84503, а они заблокированы. Ниже пример последовательности наложения блокировок из тж при очистке (кажется как будто снизу вверх по ведущим измерениям очищает).
50:34.022026-5,TLOCK,t:connectID=10917676
Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84503=1314:879d00620b067a1b11eebb61593d5b59',WaitConnections=,Context='

50:34.069013-3,TLOCK,t:connectID=10917676,
Regions=InfoRg84500.DIMS,Locks='InfoRg84500.DIMS Exclusive Fld2778=0 Fld84502=1314:879d00620b067a1b11eebb61593d5b59',WaitConnections=,Context='

Спасибо за публикацию.
10. bugagashenka 203 20.08.24 11:08 Сейчас в теме
Основная проблема в неполном захвате.
Измерение1 + Измерение3 блокирует в том числе все Измерения2, потому и возникают ожидания.
Нужно накладывать отбор в том числе на Измерение2(Fld84502)
За статью спасибо
11. gzharkoj 520 21.08.24 13:55 Сейчас в теме
(10) В том и дело, что вы не сможете этого сделать, это чисто платформенная вещь. И вот тут может допустить ошибку даже разработчик, который в курсе такого поведения.
15. bugagashenka 203 11.09.24 05:06 Сейчас в теме
(11) с каких пор нельзя указывать поля при наложении блокировки, если она явная и управляемая?
16. gzharkoj 520 11.09.24 09:20 Сейчас в теме
(15) так она не явна, но управляемая.
12. paulwist 26.08.24 15:33 Сейчас в теме
А где граф деадлока в xml-формате??
13. azazana 78 27.08.24 16:23 Сейчас в теме
(12) Это же не дедок субд. Это дедлок на упровляемых блокировках, на них графов не поставляют, только техжурнал ну или ЦУП, который тоже все равно парсит ТЖ.
14. paulwist 27.08.24 16:42 Сейчас в теме
DEADLOCK в заголовке статьи вместо TDEADLOCK ввёл в заблуждение, вопрос снимаю :)
Оставьте свое сообщение