Приложение вдруг «зависает»: запросы к базе не завершаются, страницы грузятся по 30 секунд, в логах — таймауты. Первая мысль обычно про нагрузку или медленный диск, но чаще всего дело в другом: одна транзакция держит блокировку строки, а десяток других стоят в очереди и ждут, пока она освободится. Разберёмся, как устроены блокировки в PostgreSQL и MySQL, что такое deadlock и как за пару минут найти, кто именно всех держит.
Подробнее →