Size: a a a

2020 September 09

rr

razumovsky r in CODE BLOG / C#
а не в свойстве
источник

МЕ

Макс Епифанов... in CODE BLOG / C#
)))
источник

rr

razumovsky r in CODE BLOG / C#
источник

МЕ

Макс Епифанов... in CODE BLOG / C#
да да) они творят чудеса)
источник

МР

Макс Руднев... in CODE BLOG / C#
@chelio0s  я сделяль
Значит проблема была в чем - параллельно выполняющиеся транзакции гадят друг другу, изменяя общие ресурсы так, как им хочется, вразнобой. Из-за этого и возникали то левые данные, то взаимоблокировки, которые deadlock-и.
Решением может стать блокировка общего ресурса той транзакцией, которая к нему первая достучалась. То есть мы начинаем транзакцию, и тут же ставим блокировку на общий ресурс. Причем такую, что другие транзакции даже доступа на чтение не могут получить.
Конкретно в моем случае накладываем update-блокировку:
Запрос до: SELECT @available = Quantity FROM Storage WHERE ProductId = @productId;
Запрос после: SELECT @available = Quantity FROM Storage WITH(UPDLOCK) WHERE ProductId = @productId;
И у меня исчезли дедлоки и просчеты. Тестировал в 100 потоков.
Вот тут подробнее: https://habr.com/ru/company/mindbox/blog/261661/
источник

S

Sergey Trofimov in CODE BLOG / C#
Макс Руднев
@chelio0s  я сделяль
Значит проблема была в чем - параллельно выполняющиеся транзакции гадят друг другу, изменяя общие ресурсы так, как им хочется, вразнобой. Из-за этого и возникали то левые данные, то взаимоблокировки, которые deadlock-и.
Решением может стать блокировка общего ресурса той транзакцией, которая к нему первая достучалась. То есть мы начинаем транзакцию, и тут же ставим блокировку на общий ресурс. Причем такую, что другие транзакции даже доступа на чтение не могут получить.
Конкретно в моем случае накладываем update-блокировку:
Запрос до: SELECT @available = Quantity FROM Storage WHERE ProductId = @productId;
Запрос после: SELECT @available = Quantity FROM Storage WITH(UPDLOCK) WHERE ProductId = @productId;
И у меня исчезли дедлоки и просчеты. Тестировал в 100 потоков.
Вот тут подробнее: https://habr.com/ru/company/mindbox/blog/261661/
Thanks
источник

МР

Макс Руднев... in CODE BLOG / C#
no problem, bro
источник

4

4g in CODE BLOG / C#
Макс Руднев
@chelio0s  я сделяль
Значит проблема была в чем - параллельно выполняющиеся транзакции гадят друг другу, изменяя общие ресурсы так, как им хочется, вразнобой. Из-за этого и возникали то левые данные, то взаимоблокировки, которые deadlock-и.
Решением может стать блокировка общего ресурса той транзакцией, которая к нему первая достучалась. То есть мы начинаем транзакцию, и тут же ставим блокировку на общий ресурс. Причем такую, что другие транзакции даже доступа на чтение не могут получить.
Конкретно в моем случае накладываем update-блокировку:
Запрос до: SELECT @available = Quantity FROM Storage WHERE ProductId = @productId;
Запрос после: SELECT @available = Quantity FROM Storage WITH(UPDLOCK) WHERE ProductId = @productId;
И у меня исчезли дедлоки и просчеты. Тестировал в 100 потоков.
Вот тут подробнее: https://habr.com/ru/company/mindbox/blog/261661/
вот за такие штуки я всегда любил mssql...
источник

AN

Alexander Neutov in CODE BLOG / C#
Макс Руднев
@chelio0s  я сделяль
Значит проблема была в чем - параллельно выполняющиеся транзакции гадят друг другу, изменяя общие ресурсы так, как им хочется, вразнобой. Из-за этого и возникали то левые данные, то взаимоблокировки, которые deadlock-и.
Решением может стать блокировка общего ресурса той транзакцией, которая к нему первая достучалась. То есть мы начинаем транзакцию, и тут же ставим блокировку на общий ресурс. Причем такую, что другие транзакции даже доступа на чтение не могут получить.
Конкретно в моем случае накладываем update-блокировку:
Запрос до: SELECT @available = Quantity FROM Storage WHERE ProductId = @productId;
Запрос после: SELECT @available = Quantity FROM Storage WITH(UPDLOCK) WHERE ProductId = @productId;
И у меня исчезли дедлоки и просчеты. Тестировал в 100 потоков.
Вот тут подробнее: https://habr.com/ru/company/mindbox/blog/261661/
Спасибо
источник

rr

razumovsky r in CODE BLOG / C#
вот вам ваш итератор, проходим дерево
источник

rr

razumovsky r in CODE BLOG / C#
источник

rr

razumovsky r in CODE BLOG / C#
нормально ваще чи хуйня ?
источник

rr

razumovsky r in CODE BLOG / C#
конечно можно было и канонически через обычный енумерейбл шарповский
источник

S

Sergey Trofimov in CODE BLOG / C#
Макс Руднев
@chelio0s  я сделяль
Значит проблема была в чем - параллельно выполняющиеся транзакции гадят друг другу, изменяя общие ресурсы так, как им хочется, вразнобой. Из-за этого и возникали то левые данные, то взаимоблокировки, которые deadlock-и.
Решением может стать блокировка общего ресурса той транзакцией, которая к нему первая достучалась. То есть мы начинаем транзакцию, и тут же ставим блокировку на общий ресурс. Причем такую, что другие транзакции даже доступа на чтение не могут получить.
Конкретно в моем случае накладываем update-блокировку:
Запрос до: SELECT @available = Quantity FROM Storage WHERE ProductId = @productId;
Запрос после: SELECT @available = Quantity FROM Storage WITH(UPDLOCK) WHERE ProductId = @productId;
И у меня исчезли дедлоки и просчеты. Тестировал в 100 потоков.
Вот тут подробнее: https://habr.com/ru/company/mindbox/blog/261661/
т.е. насколько я понял не транзакция целиком блочит, а только конкретная инструкция.. типа select, update
источник

S

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

S

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

МР

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

МР

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

S

Sergey Trofimov in CODE BLOG / C#
ну у тебя транзакция из нескольких инструкций, селект + апдейт
источник

S

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