Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет.
Недавно столкнулся с проблемой дедлоков в веб приложении, работающем с hibernate: транзакция 1 захватывает S блокировку, транзакция 2 запрашивает X блокировку, затем транзакция 1 так же запрашивает X блокировку.
Думаю, что для решения проблемы нужно избавиться от блокирующего чтения, однако в логе запросов mysql ни одного блокирующего чтения не нашёл. Вот и не понимаю как такое возможно. Может есть какой-то ещё способ учтановить на строку S блокировку кроме LOCK IN SHARE MODE? На просторах интернета ничего путного не нашёл. Уровень изоляции - READ COMMITTED.
Неактивен
Срабатывает ли автоматическое детектирование дедлоков?
На уровне "READ COMMITTED" автоматической блокировки быть не должно. При использовании транзакций нужно быть готовым к тому, что транзакция откатится. Чтобы избежать дедлоков, попробуйте (если такое возможно) бликировать все, что нужно для транзации в ее начале.
Неактивен