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