Im Zusammenhang mit Sperren sind Tabellen und ihre zugehörigen Indizes separate Einheiten. Manchmal findet Dead Locking zwischen einer Tabelle und ihrem Index statt, anstatt zwischen zwei separaten Tabellen.
Das Problem tritt am wahrscheinlichsten auf, wenn eine Sperre für einen Index erworben wird und dann eine weitere Sperre für die zugehörige Tabelle (d. h. bar) erworben wird, um die Datensuche durchzuführen. Beim Einfügen geschieht dies in umgekehrter Reihenfolge. Zuerst wird die Tabelle (d. h. bar) gesperrt und aktualisiert, dann werden die Indizes gesperrt.
select foo
from bar
where @someId = 0 OR SomeId = @someId
Haben Sie/können Sie einen abdeckenden Index hinzufügen (um bei der Auswahl zu helfen), der sowohl SomeId als auch foo enthält? Auf diese Weise vermeiden Sie die Suche vollständig und verhindern, dass das Problem auftritt.
Können Sie die Abfragepläne anstelle von Deadlock-Frames posten?