21.12.2016, 17:58 | #1 |
Участник
|
Блокировка Batch при списании журналов операций
Добрый день!
При списании журналов операции в пакетном режиме на SQL возникает блокировка на запросе: (@P1 int,@P2 datetime2,@P3 int,@P4 int,@P5 int,@P6 int,@P7 int,@P8 int,@P9 int,@P10 int,@P11 int,@P12 int)UPDATE BATCH SET STATUS=@P1,MODIFIEDDATETIME=@P2,RECVERSION=@P3 WHERE ((STATUS=@P4) AND (CONSTRAINTTYPE=@P5)) AND EXISTS (SELECT 'x' FROM BATCHJOB T2 WITH ( READCOMMITTEDLOCK) WHERE ((T2.STATUS=@P6) AND (BATCH.BATCHJOBID=T2.RECID)) AND NOT (EXISTS (SELECT 'x' FROM BATCHCONSTRAINTS T3 WITH ( READCOMMITTEDLOCK) WHERE EXISTS (SELECT 'x' FROM BATCH T4 WITH ( READCOMMITTEDLOCK) WHERE (((T3.DEPENDSONBATCHID=T4.RECID) AND (T3.BATCHID=BATCH.RECID)) AND ((((T4.STATUS<>@P7) AND (T4.STATUS<>@P8)) OR ((T3.EXPECTEDSTATUS=@P9) AND (T4.STATUS=@P10))) OR ((T3.EXPECTEDSTATUS=@P11) AND (T4.STATUS=@P12)))))))) Данный запрос вызывает метод Classes\BatchRun\serverProcessDependencies. В результате полностью блокируется таблица Batch, перестают выполняться пакетные задания, которые даже не отностятся к данной группе пакетов и к текущей компании. Никто не решал данную проблему? AX2012 R3, SQL2012 |
|
21.12.2016, 21:56 | #2 |
Участник
|
Таблички Batch* достаточно проблемные, гарантированного универсального решения, по крайней мере у меня нет. В качестве путей решения могу предложить:
1. Переиндексация. Смотреть DBCC SHOWCONTIG по каждому индексу, обычно они в безобразном состоянии, т.к. многие записи динамически создаются/удаляются. 2. Если блокируется именно вся таблица (я честно говоря сомневаюсь в этом, но чем черт не шутит) - смотрим Отключение эскалации блокировок в MSSQL 2008 3. Если происходит эскалация блокировки с записи до страницы (тоже неприятно), то можно отключить это в индексе(ах). 4. Не плохо бы посмотреть на наличие "сторонних" вмешательств в механизмы пакетных заданий в АХ 5. А может блокировка не на табличках Batch* ? |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
22.12.2016, 05:59 | #3 |
Участник
|
Цитата:
Сообщение от Alexius
Таблички Batch* достаточно проблемные, гарантированного универсального решения, по крайней мере у меня нет. В качестве путей решения могу предложить:
1. Переиндексация. Смотреть DBCC SHOWCONTIG по каждому индексу, обычно они в безобразном состоянии, т.к. многие записи динамически создаются/удаляются. 2. Если блокируется именно вся таблица (я честно говоря сомневаюсь в этом, но чем черт не шутит) - смотрим Отключение эскалации блокировок в MSSQL 2008 3. Если происходит эскалация блокировки с записи до страницы (тоже неприятно), то можно отключить это в индексе(ах). 4. Не плохо бы посмотреть на наличие "сторонних" вмешательств в механизмы пакетных заданий в АХ Указанный выше запрос не выполняется до тех пор, пока не разнесутся все журналы операций. В SQL видно что процесс заблокирован именно процессом разноски журналов операций. Соответственно все остальные пакетные задания ждут окончания списания. Может быть еще дело в том что для списания мы запускаем ОДНО пакетное задание, в котором указываем все магазины. В результате мы имеем ОДНО пакетное задание состоящие из подзаданий, равное кол-ву списываемых журналов. Попробую для каждого магазина настроить свое пакетное задание. |
|
22.12.2016, 06:08 | #4 |
Участник
|
Еще обратил внимание что в методе Classes\BatchRun\serverProcessDependencies для таблиц
установлен уровень изоляции readCommittedLock X++: constraintsOr.readCommittedLock(true); batchDependsOr.readCommittedLock(true); constraintsAnd.readCommittedLock(true); batchDependsAnd.readCommittedLock(true); |
|
22.12.2016, 09:42 | #5 |
Участник
|
Проблема возникает когда много AOS-ов. Делали вот так
http://www.spartid.com/2015/11/09/ax...lems-deadlock/ параметризировав пакетную группу. |
|
|
За это сообщение автора поблагодарили: AvrDen (1). |
23.01.2017, 08:57 | #6 |
Модератор
|
Вышел KB 3216955, Bug Id 3804879: Continuous dead locks in batch tables
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: Logger (3), skuull (1). |
23.01.2017, 09:49 | #7 |
Злыдни
|
Это исправление для 2012 R2
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
23.01.2017, 10:47 | #8 |
Модератор
|
__________________
-ТСЯ или -ТЬСЯ ? |
|
Теги |
ax2012, deadlock, пакетная обработка |
|
|