|
![]() |
#1 |
Участник
|
Цитата:
Блокировка NumberSequence к исправлениям в коде, пояснен принцип исправлений. Я думаю у вас нечто схожее. Т.е. основным соединением, в котором идут транзакции, выбираются forupdate записи из numberSequenceTable и прочих таблиц. А нужно использовать вновь открываемое соединение к базе, тогда эта таблица надолго блокироваться не будет и не будет блокировок и тупиковых ситуаций. |
|
![]() |
#2 |
Участник
|
Я извиняюсь за нупский вопрос, но как алгоритмически это сделать? Я просто раньше не сталкивался толком с UserConnect, да и полугодовой перерыв в работе даёт знать, к сожалению.
Вcё происходит в классе NumberSeqCleanUp В методе ран создаёт(только создаются) user connection, далее в нём просто вызывается X++: this.cleanUpSequence(userConnection,numberSequenceTableClean); X++: userConnection.ttsbegin(); numberSequenceTableUpd.setConnection(userConnection); select forupdate firstonly numberSequenceTableUpd index hint SeriesIdx where numberSequenceTableUpd.numberSequence == _numberSequenceTable.numberSequence; В примере с Release всё понятно, там были просто ttsbegin-commit и добавлялся connection внутрь их. А здесь как-то неясно мне, подскажите, пожалуйста! |
|
![]() |
#3 |
Участник
|
Ещё выяснилась подробность, что оказывается это не в первый раз, а уже бывало когда-то. И тогда лечилось брутфорсом в виде 20-30-кратного создания заказа, пока не удавалось провести разноску. Что только подтверждает данный баг... но конечно так лечить каждый раз не айс
|
|
Теги |
блокировка, разноска, number sequence |
|
|