26.03.2007, 18:14 | #1 |
Участник
|
сброс блокировок при update
Dear All!
(AX 3.0 SP3 + SQL Server 2005 SP2 x64) Довольно часто попадающийся код X++: ttsbegin; ... select forupdate Table ...; ... Table.update(); ... ttscommit; Отслеживал профайлером блокировки, но, не знаю по какой причине, не ловятся Lock Release. Может, глюк какой... А вопрос следующий: когда происходит снятие блокировок на update? После Table.update()? Или после ttscommit? Или после выхода из метода и "ликвидации" экземпляра Table? Вопрос к тем, кто на практике это наблюдал... |
|
26.03.2007, 18:25 | #2 |
Участник
|
А вот так
X++: ttsbegin; pause; select forupdate Table ...; pause; Table.update(); pause; ttscommit; pause; |
|
26.03.2007, 21:37 | #3 |
Участник
|
Не раньше последнего ttsCommit
Возможно что у вас этот код был внутри другой транзакции - потому блокировки не снимались и вы не видели их Lock Release. Посомтрите в коде значение Application.ttsLevel() Пока её значение отлично от 0 - не должно быть освобождения от блокировок. В отладчике можно непосредственно увидеть в строке статуса уровень вложенности текущей транзакции, так что можно просто отладчиком пройтись. Последний раз редактировалось Logger; 26.03.2007 в 21:41. Причина: опечатки |
|
27.03.2007, 11:31 | #4 |
Участник
|
2belugin
2Logger Спасибо! 2belugin Насчёт pause: на рабочей Аксапте, к сожалению, это невозможно... А на тестовой можно - просто не сообразил... |
|