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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.08.2017, 10:17   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,882 / 3148 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Alexius Посмотреть сообщение
Времени на детальный разбор не предвиделось и была сделана затычка в виде блокировочной таблички, которая не дает обновлять Batch в классе BatchRun одновременно с нескольких AOSов.
Интересно.
На первый взгляд, примерно такую защиту предоставляет табличка batchGlobal и код по ее блокировке в методах
BatchRun::ServerGet*
BatchRun::ServerProcess*

Вы не пробовали просто ее задействовать ?
Хотя возможно я ошибаюсь - глубоко не вникал.
Старый 03.08.2017, 10:31   #2  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Logger Посмотреть сообщение
На первый взгляд, примерно такую защиту предоставляет табличка batchGlobal и код по ее блокировке в методах
BatchRun::ServerGet*
BatchRun::ServerProcess*

Вы не пробовали просто ее задействовать ?
Хотя возможно я ошибаюсь - глубоко не вникал.
Возможно и так, я тоже глубоко не вникал, т.к. ятаганы очень близко и мерзко свистели. Поэтому был выбран "топорный" путь, который работает.

PS. Изменение уровня изоляции транзакций не улучшает ситуацию.
PS2. Затыкания только в serverProcessDependencies недостаточно, надо лопатить во всех методах на изменение Batch.
Старый 03.08.2017, 10:46   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Откопал из загашников запросик, кажется это тот, на котором я ловил ошибочное поведение MS SQL :
X++:
BEGIN TRAN

UPDATE BATCH 
SET STATUS=5
WHERE ((STATUS=1) AND (CONSTRAINTTYPE=0)) 
  AND EXISTS (
    SELECT 'x' 
    FROM BATCHJOB T2 WITH ( READCOMMITTEDLOCK) 
    WHERE ((T2.STATUS=2) 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<>3) AND (T4.STATUS<>4)) OR ((T3.EXPECTEDSTATUS=4) AND (T4.STATUS=3))) OR ((T3.EXPECTEDSTATUS=4) AND (T4.STATUS=3))))))))

--COMMIT TRAN
--ROLLBACK TRAN
Желающие могут провести собственные изыскания на нем:
1. Создать тестовую среду
2. Открыть и запустить запросик в одном окне SSMS без завершения транзакции
3. Открыть и запустить запросик во втором окне SSMS без завершения транзакции
4. Завершить транзакции в первом и затем во втором окне (или наоборот)
5. Насладится результатами
За это сообщение автора поблагодарили: Logger (5), Raven Melancholic (10).
Теги
ax2012, batch, batchrun, reqreaderwriterlock, баг, блокировки, закрытие склада

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance - Analyzing key SQL Server configuration and database settings Blog bot DAX Blogs 0 28.09.2015 14:11
emeadaxsupport: AX for Retail 2012 R2: Run-down on Log Files Blog bot DAX Blogs 0 21.06.2013 08:11
emeadaxsupport: AX for Retail 2012 R2: Installing the Real-time Service Blog bot DAX Blogs 0 19.12.2012 11:11
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
dynamics-ax: Interview with Microsoft's Lachlan Cash on his new role, AX 2012 and more Blog bot DAX Blogs 6 22.04.2011 14:55

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.