Встречается на собеседованиях • сегодня

Как бороться с deadlock-ами в базе данных

Deadlock возникает, когда две или более транзакции блокируют ресурсы и ждут друг друга. Основные способы борьбы:

  1. Порядок блокировок – всегда блокируйте ресурсы в одинаковом порядке. Например:
java
// Правильно:
transaction1.lock(A).lock(B);
transaction2.lock(A).lock(B); // Не deadlock
  1. Таймауты – устанавливайте максимальное время ожидания блокировки:
sql
SET LOCK_TIMEOUT 5000; -- 5 секунд (SQL Server)
  1. Изоляция транзакций – используйте READ COMMITTED вместо SERIALIZABLE, если возможно.

  2. Мелкие транзакции – разбивайте большие транзакции на меньшие.

  3. Обнаружение и откат – СУБД обычно автоматически обнаруживают deadlock и отменяют одну из транзакций. Можно ловить SQLException и повторять операцию.

  4. Оптимистичные блокировки – используйте версионирование вместо пессимистичных блокировок.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы