Я попал в тупиковую проблему, из-за которой я изо всех сил пытаюсь найти основную причину ... График тупиковой ситуации предполагает, что оператор UPDATE стал жертвой по сравнению с оператором SELECT ...
Что меня озадачивает, так это то, что оператор UPDATE пытается получить индекс для какой-то другой таблицы, которая никогда не упоминается в операторе обновления ...
Вот так выглядит мой оператор UPDATE ...
UPDATE Table set col1 = @P1 where col2 = @P2
Этот оператор получил X-блокировку для индекса col2, но также пытается получить индекс для столбца, определенного в некоторой другой таблице, которая никак не связана с оператором UPDATE ...
И оператор SELECT, который победил в ситуации взаимоблокировки, не имеет ничего общего с таблицей или индексом в операторе обновления, но попытался получить индекс для таблицы в операторе UPDATE. в конечном итоге вызывает DEADLOCK.