MSSQLSERVER_1205

Сведения

Название продукта

SQL Server

Версия продукта

10.0

Номер сборки продукта

10.00.0000.00

Идентификатор события

1205

Источник события

MSSQLSERVER

Компонент

SQLEngine

Символическое имя

LK_VICTIM

Текст сообщения

Транзакция (с идентификатором процесса %d) вызвала взаимоблокировку ресурсов %.*ls с другим процессом и была выбрана в качестве жертвы для ее разрешения. Запустите транзакцию повторно.

Объяснение

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

  • Транзакция1 обновляет строку Таблица1.Строка1, в то время, как транзакция2 обновляет строку Таблица2.Строка2.

  • Транзакция1 пытается произвести обновление строки Таблица2.Строка2, но происходит блокировка, так как транзакция2 еще не зафиксирована.

  • Транзакция2 пытается провести обновление строки Таблица1.Строка1, но происходит блокировка, так как транзакция1 еще не зафиксирована.

  • Взаимоблокировка происходит из-за того, что транзакция1 ожидает завершения транзакции2, а транзакция2 ожидает завершения транзакции1.

Система обнаруживает эту взаимоблокировку и выбирает одну из транзакций в качестве жертвы взаимоблокировки, публикуя данное сообщение и производя откат транзакции-жертвы. Дополнительные сведения о взаимоблокировках см. в разделе Взаимоблокировка.

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

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

Для предотвращения взаимоблокировок необходимо убедиться в том, что все транзакции получают доступ к строкам в одном и том же порядке (Таблица1, затем Таблица2). Хотя при таком подходе могут возникнуть блокировки, взаимоблокировки не произойдут. Дополнительные сведения о рекомендуемых действиях см. в разделе Обнаружение и устранение взаимоблокировок.