Поделиться через


Обработка взаимоблокировок

Когда экземпляр 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 приложение сможет справиться с взаимоблокировкой и предпринять действия по ее исправлению (например автоматически повторить запрос, который не был выполнен из-за взаимоблокировки). Если повторное выполнение запроса происходит автоматически, пользователю не обязательно знать о возникновении взаимоблокировки.

Перед повторным выполнением запроса приложение должно выдержать небольшую паузу, чтобы дать второй транзакции, участвующей во взаимоблокировке, шанс закончить работу и освободить блокировку, мешающую транзакции приложения. Благодаря этому приложение минимизирует вероятность повторного возникновения взаимоблокировки при повторном выполнении запроса.

См. также

Основные понятия

Взаимоблокировка
Обнаружение и устранение взаимоблокировок
Минимизация взаимоблокировок
Обработка ошибок и сообщений в приложениях

Справка и поддержка

Получение помощи по SQL Server 2005