MSSQLSERVER_1205
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
Сведения
Атрибут | Значение |
---|---|
Название продукта | SQL Server |
ИД события | 1205 |
Источник событий | MSSQLSERVER |
Компонент | SQLEngine |
Символическое имя | LK_VICTIM |
Текст сообщения | Транзакция (с идентификатором процесса %d) вызвала взаимоблокировку ресурсов %.*ls с другим процессом и была выбрана в качестве жертвы для ее разрешения. Запустите транзакцию повторно. |
Описание
Доступ к ресурсам осуществляется в конфликтном порядке в отдельных транзакциях, из-за чего возникает взаимоблокировка. Например:
-
Transaction1
обновленияTable1.Row1
, в то время какTable2.Row2
Table2.Row2
транзакция2 -
Transaction1
пытается обновитьTable2.Row2
, но заблокирован, так какTransaction2
еще не зафиксирована и не выпустила свои блокировки - Транзакция2 теперь пытается обновить
Table1.Row1
, но заблокирована, так какTransaction1
не зафиксирована и не выпустила свои блокировки - Взаимоблокировка возникает, так как
Transaction1
ожидает завершенияTransaction2
, ноTransaction2
ожидает завершенияTransaction1
.
Система обнаруживает эту взаимоблокировку и выбирает одну из транзакций, участвующих в качестве жертвы. Затем он выдает это сообщение об ошибке, откатив транзакцию жертвы. Подробные сведения см. в разделе "Взаимоблокировки".
Действие пользователя
Взаимоблокировки в большинстве случаев связаны с приложениями и требуют от разработчиков приложений изменения кода. Один из подходов при получении ошибки 1205 заключается в повторном выполнении запросов. Дополнительные сведения см. в приложении симулятора взаимоблокировки для разработчиков: как обрабатывать проблему взаимоблокировки SQL в приложении.
Во избежание взаимоблокировок можно изменить выполняемое приложение. Транзакция, выбранная в качестве жертвы, может быть извлечена и, вероятно, успешно выполнена в зависимости от того, какие операции выполняются одновременно.
Чтобы предотвратить или избежать взаимоблокировок, рассмотрите возможность доступа ко всем строкам транзакций в одном порядке (Table1
, а затем Table2
). Таким образом, хотя блокировка может произойти, взаимоблокировка избегается.
Дополнительные сведения см. в разделе "Обработка взаимоблокировок " и "Минимизация взаимоблокировок".