![]() |
#1 |
Участник
|
Ответ: По поводу while select forUpdate
Ответ на сообщение Коллеги, что вы думаете о данном коде?
Zitat:
Так вот, с включенным оптимистическим OCC никакой блокировки при вызове [while] select forUpdate уже не происходит (вот насчет того, что блокировка отключается и в трешке не уверен ![]() Да и приведенный в статье код - это попытка задействовать этот самый механизм при отсутствии его поддержки ядром Правда, с моей точки зрения, в данном конкретном случае никаких преимуществ это не дает.
И, если уж идет речь об исключении эскалации, то более эффективно будет управлять этим на уровне настроек SQL-сервера, а не прикладного кода. Хотя, есть маленький финт, который позволит блокировать эскалации из алгоритма, в случае если надо обработать много записей. Достаточно перед выполнением while select forUpdate сделать запрос с блокировкой к несуществующей записи в отдельном коннекте в своем контексте транзакции, которая будет удерживаться все время выполнения операции X++: MyTable myTableLock; MyTable myTable; UserConnection uc = new UserConnection(); ; myTableLock.setConnection(uc); myTableLock.concurrencyModel(ConcurrencyModel::Pessimistic); // Это нужно для 2009-й (и четверки, по всей видимости) для гарантированного срабатывания uc.ttsbegin(); select forUpdate myTableLock where myTableLock.RecId == 0; //Дальше можно выполнять обработку большего количества записей таблицы ttsbegin; myTable.concurrencyModel(ConcurrencyModel::Pessimistic); // Это нужно для 2009-й (и четверки, по всей видимости) для гарантированного срабатывания while select forUpdate myTable { myTable.update(); } ttscommit; uc.ttsabort(); С включенной оптимистической конкуренцией этот хинт, естественно, не нужен
__________________
Axapta v.3.0 sp5 kr2 Geändert von AndyD (19.07.2012 um 17:24 Uhr) |
|
|
This post has been rated by: sukhanchik (2), GBH (1). |
![]() |
#2 |
MCT
|
Zitat:
Zitat von AndyD
![]() Ответ на сообщение Коллеги, что вы думаете о данном коде?
Если бы вы внимательно прочитали ссылку, которую привели, то увидели бы, что ... ![]() ЗЫ не надо подозревать в чем не уверены. ![]() Прошу не устраивать холивар на тему чьи яйца круче.
__________________
Axapta book for developer Geändert von MikeR (19.07.2012 um 18:25 Uhr) |
|
![]() |
#3 |
Участник
|
Zitat:
Zitat von MikeR
![]() Во-первых, спасибо за расширенный ответ, а во вторых у нас то как раз OCC и выключен и записей в таблице приближается пока к 1000. И поэтому я об этом и писал, жаль что вы не уточнили и сразу выводы делаете.
![]() ЗЫ не надо подозревать в чем не уверены. ![]() Прошу не устраивать холивар на тему чьи яйца круче.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
This post has been rated by: MikeR (2). |
|
![]() |
||||
Thema | Antworten | |||
dynamicsaxtraining: Select statement patterns | 10 | |||
kamalblogs: Using while select firstonly to avoid validations in Dynamics Ax | 6 | |||
Разница NotInTTS и Found | 6 | |||
Вопрос про Demand Planner | 4 | |||
select FORUPDATE | 5 |
|