Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Сведения
| Атрибут | Значение |
|---|---|
| Название продукта | 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). Таким образом, хотя блокировка может произойти, взаимоблокировка избегается.
Дополнительные сведения см. в разделе "Обработка взаимоблокировок " и "Минимизация взаимоблокировок".