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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.02.2017, 00:09   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
слияние глобальных адресов Merge GAB records
AX 2012 R3

коллеги, кто-нибудь сталкивался с проблемой deadlock при попытке одновременного слияния записей в глобальной книге адресов в двух разных сессиях?

написал классик, который вызывает стандартную процедуру слияния, но столкнулся с большим количеством deadlocks.

снятая SQL трассировка показывает виновником торжества метод

sourcePersonRecord.merge(targetPersonRecord);

то есть ключевой метод xRecord.merge(). он системный, и непонятно, как с этим бороться.

очень хочется запускать несколько независимых процессов, но при таком количестве "мёртвых" единственный выход - это зависимые задачи в одном batch.

KB3209851 проблему не решил.

то есть, дело явно не в батч-процессинге.

попробовал вручную закатить солнце из двух открытых сессий и получил ту же пулю в лоб.

как жить?
Миниатюры
Нажмите на изображение для увеличения
Название: d1.png
Просмотров: 410
Размер:	37.9 Кб
ID:	11181   Нажмите на изображение для увеличения
Название: d2.png
Просмотров: 424
Размер:	18.8 Кб
ID:	11182  

Нажмите на изображение для увеличения
Название: d3.png
Просмотров: 461
Размер:	31.6 Кб
ID:	11183   Нажмите на изображение для увеличения
Название: mergeparties.png
Просмотров: 544
Размер:	38.4 Кб
ID:	11184  

__________________
Felix nihil admirari
Старый 05.02.2017, 10:40   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
А по каким именно ресурсам deadlock происходит? Можно deadlock graph посмотреть? (как его записать, написано здесь: https://msdn.microsoft.com/en-us/lib...=sql.120).aspx)

P.S.: Попытаюсь попасть пальцем в небо: попробуйте временно отключить RecId индекс на ContactPerson
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: wojzeh (1).
Старый 09.02.2017, 22:23   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
А по каким именно ресурсам deadlock происходит? Можно deadlock graph посмотреть? (как его записать, написано здесь: https://msdn.microsoft.com/en-us/lib...=sql.120).aspx)
ох, там что-то надо ставить на сикелину, у меня и прав там нету.

Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
P.S.: Попытаюсь попасть пальцем в небо: попробуйте временно отключить RecId индекс на ContactPerson
не помогло. похоже, какой-то баг внутри этого merge()
__________________
Felix nihil admirari
Старый 10.02.2017, 09:44   #4  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Недавно я ковырял метод xRecord.merge() используя стандартный класс , не знаю про dedlocks, у меня такого не было, зато очень много бился с duplicate key exception.
Как я вижу, вы тоже пытаетесь объединять субъекты (физиков) в Ax2012, но как я понял, своим собственным классом.

Мне кажется надо делать как в DirParyMerge.runOnServer(), т.к. в нем не только merge происходит, но еще и удаление записей.
Старый 10.02.2017, 19:16   #5  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от Dreadlock Посмотреть сообщение
Недавно я ковырял метод xRecord.merge() используя стандартный класс , не знаю про dedlocks, у меня такого не было, зато очень много бился с duplicate key exception.
Как я вижу, вы тоже пытаетесь объединять субъекты (физиков) в Ax2012, но как я понял, своим собственным классом.

Мне кажется надо делать как в DirParyMerge.runOnServer(), т.к. в нем не только merge происходит, но еще и удаление записей.
Именно ей и пользуюсь, просто запуская из пакета. Проблема в том, что deadlock возникает при простом одновременном запуске этой стандартной функции слияния из двух сессий. А ковырять в методе merge нечего - он системный.
__________________
Felix nihil admirari
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
palleagermark: Use Visual Studio to merge code for an AX 2012 CU Blog bot DAX Blogs 0 09.05.2016 11:12
Dynamics AX Sustained Engineering: KB3030212 Duplicate InventDim records are created which cause errors in the WHS if license plate IDs include trailing blanks Blog bot DAX Blogs 0 22.01.2015 20:12
palleagermark: Discarding merge of a changeset in TFS Blog bot DAX Blogs 0 30.04.2014 16:11
axinthefield: Update multiple records with 'Fill Utility' Blog bot DAX Blogs 0 21.06.2011 19:11
Axapta Lessons: Merge Customer Records Blog bot DAX Blogs 0 28.10.2006 18:22

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

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

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