14.01.2011, 07:50 | #1 |
Участник
|
Блокировка таблицы LedgerBalancesTransDelta (AX 2009)
Добрый день!
Используется: Приложение: АХ 2009 (SP1 + RU5) База: SQL Server 2005 Проблема: При создании проводок ГК происходит блокировка таблицы LedgerBalancesTransDelta. Возникает ошибка: Невозможно удалить записть в Сальдо ГК - Аналитики (LedgerBalancesTransDelta). Счет ГК: , . Тупиковая ситуация. Один или несколько пользователей одновременно блокировали всю таблицу или ее часть. Блокировка происходит периодически при работе у разных пользователей. Воссоздать ситуацию искусственно пока не удалось. Операции, вызывающие ошибки, самописные, были перенесены с ах3, возможно что-то не учтено при переносе. Но удаление записей в таблице LedgerBalancesTransDelta происходит в стандартном методе LedgerBalancesTransDelta::deleteTemporaryDeltaRecords(userTTSId, connection). Вызывается метод так же стандартно из класса LedgerVoucher. В чем может быть проблема? |
|
14.01.2011, 08:51 | #2 |
Модератор
|
Вот это уже интересно. Модификации на LedgerBalancesTransDelta или классах разноски в ГК есть? Локализовать ошибку (например, посмотреть граф дедлока) не пробовали?
__________________
-ТСЯ или -ТЬСЯ ? |
|
14.01.2011, 09:17 | #3 |
Участник
|
Модификаций на самой таблице LedgerBalancesTransDelta - нет.
На классах разноски ГК (LedgerVoucher*) - есть. Добавлена проверка на аналитику ЦЗ и добавлены параметры для LedgerTrans, которые не затрагивают основной логики формирования проводок. Классы LedgerBalances* - стандартные. Локализовать ошибку пока нет возможности из-за удаленной работы. |
|
14.01.2011, 18:41 | #4 |
Модератор
|
Ну, если ничего подозрительного в классах разноски не видно, я бы поизучал граф дедлока и начал с того, что выяснил, с какой операцией (INSERT или DELETE) мы при удалении "схлестнулись"
__________________
-ТСЯ или -ТЬСЯ ? |
|
20.08.2013, 16:23 | #5 |
MCTS
|
Столкнулся с такой же проблемой. Если кому-нибудь понадобится, то решил следующим образом:
В конструкторе класса LedgerBalancesPostingList меняем значение флага isUsingSecondUserConnection: X++: //#define.isUsingSecondUserConnection(false) #define.isUsingSecondUserConnection(true) X++: //LedgerBalancesTransDelta::transferTempDeltaRecsToLedgerBalances(userTTSId);
LedgerBalancesTransDelta::transferTempDeltaRecsToLedgerBalances(userTTSId, connection); Честно говоря, я так до конца и не разобрался в чем конкретно была причина данной ошибки. Такое впечатление что при длинных транзакциях таблица LedgerBalancesTransDelta блокировалась целиком. Но тем не менее после этих изменений ошибки исчезли. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
20.08.2013, 17:10 | #6 |
Участник
|
прошу прощения, но это до первого аварийного завершения клиента будет работать?
|
|
21.08.2013, 09:46 | #7 |
Участник
|
Цитата:
Столкнулся с такой же проблемой. Если кому-нибудь понадобится, то решил следующим образом:
Скажите а в БД SQL READ_COMMITED_SNAPSHOT ON? LedgerBalancesTransDelta OCC = Yes? Был такой документ Planning database configuration for Microsoft Dynamics AX.pdf В нем есть ряд рекомендаций по настройке... могу ошибаться, но при переходе с 3.0 на 2009 мы его включили и получили сюрпризы в части доработок 3.0, решили отключить и получили сюрпризы подобные вашим... тогда включили и более не отключали, допиливая доработки 3.0. Последний раз редактировалось ansoft; 21.08.2013 в 10:17. |
|
|
За это сообщение автора поблагодарили: PavelX (2). |
21.08.2013, 10:17 | #8 |
MCTS
|
Цитата:
Цитата:
Скажите а в БД SQL READ_COMMITED_SNAPSHOT ON?
LedgerBalancesTransDelta OCC = Yes? |
|
Теги |
ledgerbalancestransdelta, sql 2005, sql server, блокировка, deadlock, ax2009 |
|
|