19.07.2012, 17:20 | #1 |
Участник
|
Ответ: По поводу while select forUpdate
Ответ на сообщение Коллеги, что вы думаете о данном коде?
Цитата:
Так вот, с включенным оптимистическим 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 Последний раз редактировалось AndyD; 19.07.2012 в 17:24. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2), GBH (1). |
19.07.2012, 18:23 | #2 |
MCT
|
Цитата:
Сообщение от AndyD
Ответ на сообщение Коллеги, что вы думаете о данном коде?
Если бы вы внимательно прочитали ссылку, которую привели, то увидели бы, что ... ЗЫ не надо подозревать в чем не уверены. Прошу не устраивать холивар на тему чьи яйца круче.
__________________
Axapta book for developer Последний раз редактировалось MikeR; 19.07.2012 в 18:25. |
|
19.07.2012, 18:32 | #3 |
Участник
|
Цитата:
Сообщение от MikeR
Во-первых, спасибо за расширенный ответ, а во вторых у нас то как раз OCC и выключен и записей в таблице приближается пока к 1000. И поэтому я об этом и писал, жаль что вы не уточнили и сразу выводы делаете.
ЗЫ не надо подозревать в чем не уверены. Прошу не устраивать холивар на тему чьи яйца круче.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: MikeR (2). |