AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2016, 17:58   #1  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Блокировка 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  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Таблички Batch* достаточно проблемные, гарантированного универсального решения, по крайней мере у меня нет. В качестве путей решения могу предложить:
1. Переиндексация. Смотреть DBCC SHOWCONTIG по каждому индексу, обычно они в безобразном состоянии, т.к. многие записи динамически создаются/удаляются.
2. Если блокируется именно вся таблица (я честно говоря сомневаюсь в этом, но чем черт не шутит) - смотрим Отключение эскалации блокировок в MSSQL 2008
3. Если происходит эскалация блокировки с записи до страницы (тоже неприятно), то можно отключить это в индексе(ах).
4. Не плохо бы посмотреть на наличие "сторонних" вмешательств в механизмы пакетных заданий в АХ
5. А может блокировка не на табличках Batch* ?
За это сообщение автора поблагодарили: alex55 (1).
Старый 22.12.2016, 05:59   #3  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от Alexius Посмотреть сообщение
Таблички Batch* достаточно проблемные, гарантированного универсального решения, по крайней мере у меня нет. В качестве путей решения могу предложить:
1. Переиндексация. Смотреть DBCC SHOWCONTIG по каждому индексу, обычно они в безобразном состоянии, т.к. многие записи динамически создаются/удаляются.
2. Если блокируется именно вся таблица (я честно говоря сомневаюсь в этом, но чем черт не шутит) - смотрим Отключение эскалации блокировок в MSSQL 2008
3. Если происходит эскалация блокировки с записи до страницы (тоже неприятно), то можно отключить это в индексе(ах).
4. Не плохо бы посмотреть на наличие "сторонних" вмешательств в механизмы пакетных заданий в АХ
Спасибо за советы.

Цитата:
Сообщение от Alexius Посмотреть сообщение
5. А может блокировка не на табличках Batch* ?
Указанный выше запрос не выполняется до тех пор, пока не разнесутся все журналы операций. В SQL видно что процесс заблокирован именно процессом разноски журналов операций. Соответственно все остальные пакетные задания ждут окончания списания.

Может быть еще дело в том что для списания мы запускаем ОДНО пакетное задание, в котором указываем все магазины. В результате мы имеем ОДНО пакетное задание состоящие из подзаданий, равное кол-ву списываемых журналов. Попробую для каждого магазина настроить свое пакетное задание.
Старый 22.12.2016, 06:08   #4  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Еще обратил внимание что в методе Classes\BatchRun\serverProcessDependencies для таблиц
установлен уровень изоляции readCommittedLock
X++:
    constraintsOr.readCommittedLock(true);
    batchDependsOr.readCommittedLock(true);
    constraintsAnd.readCommittedLock(true);
    batchDependsAnd.readCommittedLock(true);
В АХ2009 его не было и не было соответствующих проблем.
Старый 22.12.2016, 09:42   #5  
michel1971 is offline
michel1971
Участник
 
77 / 78 (3) ++++
Регистрация: 14.01.2011
Проблема возникает когда много AOS-ов. Делали вот так
http://www.spartid.com/2015/11/09/ax...lems-deadlock/
параметризировав пакетную группу.
За это сообщение автора поблагодарили: AvrDen (1).
Старый 23.01.2017, 08:57   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Вышел KB 3216955, Bug Id 3804879: Continuous dead locks in batch tables
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (3), skuull (1).
Старый 23.01.2017, 09:49   #7  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
Вышел KB 3216955, Bug Id 3804879: Continuous dead locks in batch tables
Это исправление для 2012 R2
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 23.01.2017, 10:47   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от KiselevSA Посмотреть сообщение
Это исправление для 2012 R2
Да, спасибо. Для R3 - KB 3209851
__________________
-ТСЯ или -ТЬСЯ ?
Теги
ax2012, deadlock, пакетная обработка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
patrickmouwen: Dynamics AX Retail: how to automate processes and interfaces in a combined way Blog bot DAX Blogs 0 23.12.2015 23:11
axinthefield: Optimizing AX Batch Performance - Batch Group Configuration Blog bot DAX Blogs 0 01.04.2011 13:11
emeadaxsupport: How batch processing works under the hood AX2009 Blog bot DAX Blogs 0 22.02.2011 12:11
axaptapedia: Batch processing Blog bot DAX Blogs 0 29.01.2009 17:05
Блокировка журналов в Axapta 3.0 Peter Savintsev DAX: Функционал 1 01.07.2003 14:16

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:12.