Size: a a a

2020 September 09

S

Sergey Trofimov in CODE BLOG / C#
Макс Руднев
оке пошел гуглить про взаимоблокировки
если решишь, напиши потом сюда))
источник

МР

Макс Руднев... in CODE BLOG / C#
лады
источник

S

Sergey Trofimov in CODE BLOG / C#
интересный таск
источник

AN

Alexander Neutov in CODE BLOG / C#
я немного не понимаю почему более высокие уровни изоляции приводит к локам в дотнет коде
ну то есть понятно что транзакции приходится ждать и они по сути последовательно выполняются (в пределе)
но вылетает оно почему
источник

НП

Никита Петроченко... in CODE BLOG / C#
Макс Руднев
оке пошел гуглить про взаимоблокировки
Взаимоблокировки лечатся в самом приложении. Что у тебя лочится то?
источник

AN

Alexander Neutov in CODE BLOG / C#
ну вот мне тоже кажется что тут вопрос на стороне кода а не базы
источник

S

Sergey Trofimov in CODE BLOG / C#
судя по стеку там как раз SQL провайдер вылетает
источник

S

Sergey Trofimov in CODE BLOG / C#
т.е. не дот нет дедлок
источник

НП

Никита Петроченко... in CODE BLOG / C#
Sergey Trofimov
т.е. не дот нет дедлок
Лочка на уровне БД. Но все равно же это программисты делаю в основном
источник

AN

Alexander Neutov in CODE BLOG / C#
ну а на стороне базы лок эксепшн говорит за версионирование
источник

AN

Alexander Neutov in CODE BLOG / C#
да и то
источник

AN

Alexander Neutov in CODE BLOG / C#
this.
Не в обиду но мне кажется ни моего ни вашего уровня понимания баз данных не хватит чтобы помочь в этой проблеме
похоже что так
источник

AN

Alexander Neutov in CODE BLOG / C#
@RudnevMaks, зашаришь потом что накопается, пожалуйста?
Любопытно
источник

НП

Никита Петроченко... in CODE BLOG / C#
Макс Руднев
1. Начинаем транзакцию
2. смотрим доступное количество товара
3. если мы хотим зарезервировать больше, чем доступно - откат
4. выбираем id пользователя с определнным username-ом
5. если нет такого пользователя, то добавляем пользователя, и берем его id
6. Отнимаем от количества в хранилище необходимое кол-во товара, который будем резервировать
7. Вставляем в талицу резерва id товара, кол-во товара и id пользователя
8. Commit()
Лочка происходит по той причине, скорее всего, что одна транзакция пытается читать кол-во товара, а другая в это время пишет. Каждой нужен этот ресурс. По этому, скорее всего, лочка и висит
источник

AN

Alexander Neutov in CODE BLOG / C#
ну он serializable ставил даже
когда транзакции вообще последовательно должны исполняться
источник

AN

Alexander Neutov in CODE BLOG / C#
и говорит что тоже самое
источник

НП

Никита Петроченко... in CODE BLOG / C#
Но тут еще прикол в том, что такое будет сложно разрулить, потому что хоть 1000 потоков запусти, у тебя эта транзакция будет узким местом
источник

S

Sergey Trofimov in CODE BLOG / C#
Никита Петроченко
Лочка происходит по той причине, скорее всего, что одна транзакция пытается читать кол-во товара, а другая в это время пишет. Каждой нужен этот ресурс. По этому, скорее всего, лочка и висит
не, другая и не будет выполнятся пока первая не закомитится
источник

S

Sergey Trofimov in CODE BLOG / C#
Никита Петроченко
Но тут еще прикол в том, что такое будет сложно разрулить, потому что хоть 1000 потоков запусти, у тебя эта транзакция будет узким местом
так он типа имитирует доступ с 10 клиентов
источник

НП

Никита Петроченко... in CODE BLOG / C#
Sergey Trofimov
не, другая и не будет выполнятся пока первая не закомитится
Ну я как предположение, в MS не работал
источник