Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum wird SET DEADLOCK_PRIORITY HIGH von SQL Server nicht berücksichtigt?

Es sieht so aus, als ob der Befehl, der getötet wird, eine ALTER PARTITION FUNCTION ist. Es ist interessant festzustellen, dass dies eine SCH-M-Sperre erfordert, die nicht mit SCH-S-Sperren kompatibel ist, die für alles verwendet werden. Ich vermute, dass dies eine Ursache sein kann.

Siehe michaeljswart.com/2013/04/the-sch -m-lock-ist-böse .

Siehe auch diese Beschreibung eines SCH-M-Deadlocks von einer ALTER PARTITION-Funktion und einer Abfrage, die eine Statistikaktualisierung in SQL 2014 und 2016 verursacht, aber vielleicht auch in 2012 wahr ist:Deadlock Tritt auf, wenn Sie erwerben eine SCH-M-Sperre

Wenn Sie sich Ihr Diagramm ansehen, hat ein Prozess eine gemeinsame (Aktualisierungs-) Sperre für sysschobjs und wartet auf eine SCH-S-Sperre für Ihre Tabelle. Ihr Prozess hat eine SCH-M-Sperre auf Ihrer Tabelle und wartet auf eine X-Sperre auf sysschobjs. sysschobjs ist eine Systembasistabelle, die sich hinter sysobjects befindet. Siehe die Diskussion hier Technet:SQL-Abfrage, die häufig Deadlocks verursacht

Hoffe das hilft