Problembeschreibung
Stellen Sie sich folgendes Szenario vor:
-
Sie verfügen über eine Datenbank, in der die Optionen ALLOW_SNAPSHOT_ISOLATION und in Microsoft SQL Server 2008 R2 aktiviert READ_COMMITTED_SNAPSHOT .
-
Sie führen eine Select -Anweisung aus, die TABLOCK -und UPDLOCK -Hinweise für eine Tabelle in der Datenbank enthält.
-
Die Select -Anweisung wird in einem expliziten Begin Tranumschlossen, aber Commit Tran wird nicht ausgeführt.
-
Zwei weitere der gleichen Abfragen, die mit den gleichen Abfragehinweisen gestartet werden, befinden sich in der expliziten Transaktion.
In diesem Szenario ist eine der anderen Abfragen ein Deadlock, wenn die erste Abfrage zugesichert wurde.
Ursache
Das Problem tritt auf, weil SQL Server den Deadlock in einem der folgenden Szenarien fälschlicherweise meldet:
-
Wenn ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT für eine Datenbank aktiviert sind, werden mehrere Abfragen für dieselbe Transaktion möglicherweise fälschlicherweise als Deadlocks gemeldet, wenn eine dieser Transaktionen abgeschlossen ist.
-
Wenn ALLOW_SNAPSHOT_ISOTION aktiviert ist und die Hinweise TABLOCK und UPDLOCK verwendet werden, nehmen die zweite und dritte Select -Anweisung IX-Sperren mit der Absicht auf, in X zu konvertieren. Die IX-Sperren enden Deadlocks, wenn versucht wird, in X zu konvertieren.
-
Wenn ALLOW_SNAPSHOT_ISOLATION deaktiviert ist, erhält die zweite und dritte Abfrage eine Six-Sperre. In dieser Situation, wenn die SIX-Sperre in X konvertiert wird, handelt es sich nur um ein Blockierungs Szenario, nicht um einen Deadlock.
Fehlerbehebung
Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben. Nachdem Sie den Hotfix angewendet haben, wird das Problem von SQL Server durch Aufzeichnen behoben, wenn für die Datenbank und die Abfrage ein Read Commit -Hinweis oder ein NOLOCK -Hinweis gefunden wird. Diese Informationen werden verwendet, um die richtige Art von Sperren auszuwählen, um die Situation richtig zu behandeln, anstatt Deadlocks falsch zu melden.
Kumulatives Update 11 für SQL Server 2008 R2 SP2 /en-us/help/2926028
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.