Показать сообщение отдельно
Старый 25.11.2003, 18:30   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Подробности
Цитата:
Изначально опубликовано Wamr
оборотка, обычно, строится по историческим данным, то вероятность попадания такой записи в выборку очень мала (при стандартном подходе). Если строить от текущего состояния inventSum, то будут выбираться наисвежайшие данные, т.е. 99% попадется заблокированая проводка или остаток (InventSum).
Конечно, можно сделать NOLOCK, но это увеличит вероятность ошибочных результатов.
Немного не так.
Блокировка быстро поднимется с записей до страниц, а со страниц до всей таблицы
Поэтому хоть так, хоть так... вероятность будет одинакова.

Цитата:
Изначально опубликовано Wamr
Пример:
"Новая оборотка" получила данные из inventSum (PostedQty, PostedValue), потом стала отнимать исторические проводки.. в этот момент некий процесс (накладная) изменяет количество и сумму... Оборотка останавливается, дожидается окончания процесса.. накладная закрылась.. обротка "увидела новую проводку" и вычла ее из старого InventSum. (Проверено на практике)
Не так.
При создании новой проводки, Аксапта начинает транзакцию. При записи проводки, обновляется inventSum. Если inventSum заблокирован, то запись проводки не будет выполнена из-за деадлока.

Если у вас на практике такое было, значит вы прогали и использовали doInsert/doUpdate

В общем, подумайте еще раз.