02.03.2021, 17:43 | #1 |
Участник
|
Зачем аксапта [3 - 2009] использует отдельное соединение для выделения непрерывной номерной серии?
Сабж, аксапты у меня нет, но по памяти помню что это так. Причем в бизнес-логике все это обернуто в транзакцию и непрерывную номерную серию не выделить с уровнем транзакции 0 (идет проверка appl.ttslevel или что-то вроде). Так вот вопрос: для чего это так создано?
|
|
02.03.2021, 18:48 | #2 |
Участник
|
Иначе номерная серия будет узким место при блокировке - все транзакци будут ждать завернешия первой, которая заблокировала НС. Ну или будут часто фейлиться при оптимистичной блокировке.
|
|
|
За это сообщение автора поблагодарили: Lemming (12). |
02.03.2021, 18:49 | #3 |
Moderator
|
Потому что номерная серия используется многими пользователями, и если бы она обновлялась в рамках основной сессии (и основной транзакции), то запись бы блокировалась до окончания основной транзакции. (которая вполне может минут 10-15 длиться в тяжелом случае).
А проверка уровня транзакции 0, она с другим механизмом связана, с механизмом непрерывных номерных серий. Там кроме самой серии ведется табличка с выделенными номерами. Когда номер выделяется, он в это табличке помечается как Нерешенный. (поскольку до окончания основной транзакции невозможно сказать, будет этот номер использован или нет). В момент окончания или отката основной транзакции, запускается обработчик, который эти номера помечает как использованные или неиспользованные. Когда система пытается выделить новый номер, прежде чем увеличивать основной счетчик, система ищет в табличке уже выделенных значений, строки помеченные как Свободный. Там еще есть механизм, который позволяет непрерывными номерными сериями пользоваться не из транзакции. Можно просто выделить номер и позже его через API пометить как используемый или неиспользуемый.... |
|
|
За это сообщение автора поблагодарили: Lemming (12). |
Теги |
номерная серия |
|
|