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

Was sind Zeilen-, Seiten- und Tabellensperren? Und wenn sie erworben werden?

Zeilensperre

Eine Zeilensperre ist die niedrigste Granularitätsebene für Sperren, die in SQL Server möglich ist. Dies bedeutet, dass eine oder mehrere bestimmte Zeilen gesperrt werden und die angrenzenden Zeilen weiterhin für das Sperren durch gleichzeitige Abfragen verfügbar sind.

Seitensperre

Eine Seitensperre in SQL Server sperrt Daten im Wert von 8 KB, selbst wenn Ihre Abfrage nur 10 Bytes von der Seite benötigt. Ihre Abfrage sperrt also zusätzliche Daten, die Sie in Ihrer Abfrage nicht anfordern.

Hobt-Sperre

Wenn eine Tabelle mit "SQL Server Table partitioning" partitioniert wird, ist es möglich, dass eine einzelne Partition gesperrt wird (Hobt steht für Heap oder B-Tree)

Hinweis: Die Sperreneskalation zu HOBT-Sperren ist standardmäßig deaktiviert. Führen Sie ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) aus um die HOBT-Sperreneskalation zu aktivieren.

Tabellensperre

Eine Tabellensperre sperrt die komplette Tabelle.

Was sind Datenseiten

Microsoft SQL Server organisiert alle seine Daten in "Datenseiten", die Daten im Wert von 8K enthalten können. Das bedeutet, dass bei jedem Datenzugriff im SQL Server 8K Informationen gelesen werden.

Datenseiten können nur Informationen aus einer Tabelle enthalten und das Layout einer Seite ist auf MSDN gut dokumentiert

Die Tatsache, dass SQL Server immer eine vollständige Datenseite liest, gibt Ihnen auch eine Vorstellung davon, warum es Sperren auf Seitenebene bevorzugt. Sperren auf Seitenebene implizieren, dass Sie möglicherweise viel mehr Daten sperren, als Sie denken.

Nehmen wir zum Beispiel an, wir haben eine Tabelle mit einer Gesamtdatensatzgröße von 1024 Byte mit einem gruppierten Index für das Feld ID . Wenn wir die folgende Abfrage ausführen:SELECT * from MyTable (xlock) where ID = 123 nicht nur dieser Datensatz wird gesperrt, sondern (je nach Seitenfüllung) maximal 3 weitere Datensätze werden ebenfalls gesperrt.

Wann werden diese Sperren erworben

Eine Abfrage wird vom Abfrage-Governor analysiert, und die erforderlichen Sperren werden bestimmt und vom Sperrverwalter angefordert. SQL Server versucht, ein Gleichgewicht zwischen Leistung und Konflikten herzustellen, um die Sperrstrategie zu bestimmen.

SQL Server folgt auch einem „Sperreneskalations“-System, das die Granularität der Sperren verringert, wenn mehr als 5000 Sperren eines bestimmten Typs erworben werden. Weitere Informationen finden Sie in diesem Artikel zur Sperreneskalation.

Dieses Verhalten kann mithilfe von Sperrhinweisen angepasst werden mit Betonung auf Hinweisen , können Sie in einer Abfrage pro Tabelle angeben, welche Art von Sperren Sie bevorzugen. SQL Server wird versuchen, Ihre Anfrage zu erfüllen, aber es wird trotzdem eine Sperrenausweitung angewendet.