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). При таком подходе могут возникнуть блокировки, но взаимоблокировка не наступит. Дополнительные сведения о рекомендуемых действиях см. в разделе Обнаружение и устранение взаимоблокировок.