Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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). Таким образом, хотя блокировка может произойти, взаимоблокировка избегается.
Дополнительные сведения см. в разделе "Обработка взаимоблокировок " и "Минимизация взаимоблокировок".