MSSQLSERVER_1205

Подробности

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

SQL Server

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

10.50

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

10.50.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.

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

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

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

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