Deadlock происходит, когда две или более транзакции постоянно ждут друг друга, чтобы освободить ресурсы. Поскольку каждая транзакция держит блокировку, которая нужна другой, ни одна не может продолжить работу.
SQL-движки разрешают deadlock автоматически, выбирая жертву — одна транзакция откатывается, позволяя другой завершиться.
Transaction A: LOCK Resource1 → waiting for Resource2
Transaction B: LOCK Resource2 → waiting for Resource1
Result: Deadlock → one transaction is killed
Livelock происходит, когда две или более транзакции активно реагируют на действия друг друга, но не делают реального прогресса. В отличие от deadlock, транзакции не заблокированы — они работают, но застряли в повторяющемся цикле.
Livelock сложнее обнаружить, потому что транзакции выглядят активными, но система не делает реального прогресса.
Обе ситуации не дают транзакциям успешно завершиться, снижая пропускную способность и параллелизм. Deadlock вызывает явные откаты, а livelock молча расходует ресурсы системы впустую.
При deadlock обе транзакции активно выполняются и многократно повторяют свои операции, тогда как при livelock транзакции блокированы и ждут, когда будут освобождены блокировки.
Новый — ещё не проверен сообществом
Вы