Что такое взаимная блокировка (deadlock)?
Уровень: Senior
Ответ
Deadlock – ситуация, когда две (или более) транзакции взаимно ждут друг друга и ни одна не может продолжиться. Например, транзакция A заблокировала строку X и хочет строку Y, а транзакция B заблокировала Y и хочет X – обе застряли. Чтобы избежать deadlock, надо: соблюдать единый порядок доступа к ресурсам (например, всегда сначала блокировать таблицу A, потом B, а не наоборот), держать транзакции как можно короче, использовать низкие уровни изоляции, где возможно. СУБД обычно умеет обнаруживать deadlock (через таймаут или граф ожиданий) и автоматически прерывает одну из транзакций, возвращая ошибку, чтобы разорвать взаимную блокировку.