Глоссарий

Дедлок (Deadlock)

Дедлок — ситуация в БД или многопоточном коде, когда два процесса ожидают друг друга и ни один не может продолжить работу. Транзакция A заблокировала ресурс 1 и ждёт ресурс 2, транзакция B — наоборот.

Как возникает

Классический пример: перевод денег. Транзакция A блокирует счёт 1, затем пытается заблокировать счёт 2. Транзакция B заблокировала счёт 2 и ждёт счёт 1. Обе ждут вечно.

Как СУБД решает

MySQL и другие СУБД автоматически обнаруживают дедлок и «убивают» одну из транзакций (с меньшим объёмом изменений). Эта транзакция завершается ошибкой и должна быть перезапущена приложением.

Профилактика