Обработка взаимоблокировок
Когда экземпляр Microsoft SQL Server Database Engine выбирает жертву взаимоблокировки, он определяет текущий пакет, откатывает транзакцию назад и возвращает приложению сообщение об ошибке с номером 1205.
Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock victim. Rerun your transaction.
Поскольку любое приложение, отправляющее запросы Transact-SQL, может быть выбрано в качестве жертвы взаимоблокировки, они должны содержать обработчик ошибок, перехватывающий ошибку 1205. Приложение, которое не обрабатывает эту ошибку, не будет знать о том, что произошел откат транзакции, и произойдет ошибка.
Благодаря обработчику ошибки 1205 приложение сможет справиться с взаимоблокировкой и предпринять действия по ее исправлению (например автоматически повторить запрос, который не был выполнен из-за взаимоблокировки). Если повторное выполнение запроса происходит автоматически, пользователю не обязательно знать о возникновении взаимоблокировки.
Перед повторным выполнением запроса приложение должно выдержать небольшую паузу, чтобы дать второй транзакции, участвующей во взаимоблокировке, шанс закончить работу и освободить блокировку, мешающую транзакции приложения. Благодаря этому приложение минимизирует вероятность повторного возникновения взаимоблокировки при повторном выполнении запроса.
См. также
Основные понятия
Взаимоблокировка
Обнаружение и устранение взаимоблокировок
Минимизация взаимоблокировок
Обработка ошибок и сообщений в приложениях