Сопоставьте владельца каждой блокировки и ресурс, который он ожидает.
Зачем
Зачем это нужно
Проверьте порядок доступа во всех участвующих путях, включая фоновые задачи.
Разделите устранение частой причины и обработку редкого транзакционного отказа.
Вопросы
Частые вопросы
Как показать цикл без огромного лога?
«Учебная транзакция A держит строку 1 и ждёт 2; B держит 2 и ждёт 1. Обе должны обновить две строки атомарно». Добавьте реальные запросы и типы блокировок из отчёта. Попросите восстановить порядок, а не только назвать выбранную базой жертву. Стектрейс приложения обычно показывает место отказа, но не всю цепь операций, создавших взаимное ожидание.
Достаточно ли сортировать идентификаторы перед обновлением?
Это помогает для показанного класса конфликтов, если все пути действительно захватывают ресурсы в согласованном порядке. Но дополнительные таблицы, индексы и внешние ключи могут добавлять другие блокировки. Попросите проверить весь транзакционный участок. Не обещайте устранение всех дедлоков одной сортировкой: исправление должно подтверждаться отчётом и воспроизведением конкретного цикла на вашей схеме и нагрузке.
Как правильно повторять после дедлока?
Повторяйте завершённую неуспешно транзакционную операцию по правилам драйвера и СУБД, заново читая данные. Ограничьте число попыток и задержку. Не отправляйте повторно письмо или внешний запрос, если они уже произошли вне откатываемой части. Попросите отдельно обозначить побочные эффекты и точку их выполнения, иначе обработка ошибки базы может незаметно создать дубли в соседнем сервисе.
Может ли помочь индекс?
Иногда индекс сокращает поиск и число затронутых записей, уменьшая окно конкуренции. Но он не исправляет противоположный порядок сам по себе. Для вывода нужны план запроса и отчёт блокировок. Енотик может предложить гипотезу, а проверка должна сравнить длительность транзакций и повторяемость конкретного конфликта. Создавать индекс на рабочей базе только по общему слову deadlock не стоит.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.