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


MSSQLSERVER_1205

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 1205
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя LK_VICTIM
Текст сообщения Транзакция (с идентификатором процесса %d) вызвала взаимоблокировку ресурсов %.*ls с другим процессом и была выбрана в качестве жертвы для ее разрешения. Запустите транзакцию повторно.

Описание

Доступ к ресурсам осуществляется в конфликтном порядке в отдельных транзакциях, из-за чего возникает взаимоблокировка. Например:

  • Transaction1 обновления Table1.Row1, в то время как Table2.Row2Table2.Row2 транзакция2
  • Transaction1 пытается обновить Table2.Row2, но заблокирован, так как Transaction2 еще не зафиксирована и не выпустила свои блокировки
  • Транзакция2 теперь пытается обновить Table1.Row1, но заблокирована, так как Transaction1 не зафиксирована и не выпустила свои блокировки
  • Взаимоблокировка возникает, так как Transaction1 ожидает завершения Transaction2, но Transaction2 ожидает завершения Transaction1.

Система обнаруживает эту взаимоблокировку и выбирает одну из транзакций, участвующих в качестве жертвы. Затем он выдает это сообщение об ошибке, откатив транзакцию жертвы. Подробные сведения см. в разделе "Взаимоблокировки".

Действие пользователя

Взаимоблокировки в большинстве случаев связаны с приложениями и требуют от разработчиков приложений изменения кода. Один из подходов при получении ошибки 1205 заключается в повторном выполнении запросов. Дополнительные сведения см. в приложении симулятора взаимоблокировки для разработчиков: как обрабатывать проблему взаимоблокировки SQL в приложении.

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

Чтобы предотвратить или избежать взаимоблокировок, рассмотрите возможность доступа ко всем строкам транзакций в одном порядке (Table1, а затем Table2). Таким образом, хотя блокировка может произойти, взаимоблокировка избегается.

Дополнительные сведения см. в разделе "Обработка взаимоблокировок " и "Минимизация взаимоблокировок".