![]() |
#12 |
Administrator
|
Все очень даже логично. Первый - создает журнал. Другой его разносит. В обоих случаях выбирается номерная серия (хотя насколько я понимаю - не всякие складские журналы при разноске генерят номерную серию - или я неправ?). У нас то были финансовые журналы - а там при разноске всегда генерится что-то новое (ну хотя бы пакет корреспонденции).
Т.о. 1-я проводка взяла новый номер и дальше ей нужно сдвинуть счетчик (сделать select forupdate numbersequencetable). Все вроде ничего... Но массовая разноска делалась что логично - в блоке ttsbegin/ttscommit. Как известно - независимо от уровней вложенности ttsbegin/ttscommit все выполняется в одной транзакции. Соответственно - в тот момент, когда все думали - что уже в БД все записалось (ttscommit стоит) - в БД ничего не записалось - т.к. это был вложенный ttscommit. Получается, что система ждет завершения последнего ttscommit. Но последний ttscommit стоит ЗА циклом по разноске (мы же хотим все "оптом" разнести - типа либо все либо ничего). Соответственно - следующая итерация ждет завершения первой. Блокировка. Вывод. Нужно выделять номера пачками - чтобы система не "лезла" каждый раз бы в БД - чтобы цикл отработал весь - до выделения следующего номера.
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
deadlock, блокировка |
|
![]() |
||||
Тема | Ответов | |||
Несколько вопросов по Проектам | 2 | |||
несколько Repot-ов и один class(RunBaseReport) | 4 | |||
Несколько || процессов в Axapta | 2 | |||
Пример DeadLock | 0 | |||
DeadLock | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|