Sperrengranularität und -hierarchien
MicrosoftSQL Server Database Engine (Datenbankmodul) verwendet multigranulare Sperren, die es ermöglichen, dass unterschiedliche Typen von Ressourcen von einer Transaktion gesperrt werden. Um die Kosten für das Sperren zu minimieren, sperrt Database Engine (Datenbankmodul) automatisch Ressourcen auf einer für die Aufgabe geeigneten Stufe. Bei Verwendung von Sperren mit differenzierterer Granularität, z. B. Sperren für Zeilen, steigt die Parallelität, aber der Verwaltungsaufwand ist größer, da mehr Sperren aufrechterhalten werden müssen, wenn viele Zeilen gesperrt werden. Die Verwendung von Sperren mit gröberer Granularität, z. B. Sperren für Tabellen, wirkt sich nachteilig auf die Parallelität aus, da durch das Sperren einer gesamten Tabelle der Zugriff auf alle Teile der Tabelle für andere Transaktionen eingeschränkt wird. Der Verwaltungsaufwand nimmt jedoch ab, da weniger Sperren aufrechterhalten werden müssen.
Database Engine (Datenbankmodul) muss häufig Sperren auf einer höheren Granularitätsebene einrichten, um eine Ressource vollständig zu schützen. Diese Gruppe von Sperren auf mehreren Granularitätsebenen wird als Sperrenhierarchie bezeichnet. Um z. B. das Lesen eines Indexes vollständig zu schützen, muss eine Instanz von Database Engine (Datenbankmodul) gegebenenfalls freigegebene Sperren für Spalten und beabsichtigt-freigegebene Sperren für die Seiten und Tabellen einrichten.
Die folgende Tabelle zeigt die Ressourcen, die Database Engine (Datenbankmodul) sperren kann.
Ressource |
Beschreibung |
---|---|
RID |
Ein Zeilenbezeichner, der verwendet wird, um eine einzelne Zeile in einem Heap zu sperren. |
KEY |
Eine Zeilensperre in einem Index, die verwendet wird, um Schlüsselbereiche in serialisierbaren Transaktionen zu schützen. |
PAGE |
Eine 8-KB-Seite in einer Datenbank, z. B. Daten- oder Indexseiten. |
EXTENT |
Eine zusammenhängende Gruppe von acht Seiten, z. B. Datenseiten oder Indexseiten. |
HoBT |
Ein Heap oder eine B-Struktur. Eine Sperre, die eine B-Struktur (Index) oder den Heap von Datenseiten in einer Tabelle schützt, die keinen gruppierten Index besitzt. |
TABLE |
Die vollständige Tabelle mit sämtlichen Daten und Indizes. |
FILE |
Eine Datenbankdatei. |
APPLICATION |
Eine von der Anwendung angegebene Ressource. |
METADATA |
Metadatensperren. |
ALLOCATION_UNIT |
Eine Zuordnungseinheit. |
DATABASE |
Die gesamte Datenbank. |
Hinweis |
---|
HoBT und TABLE-Sperren können durch die LOCK_ESCALATION-Option von ALTER TABLE beeinflusst werden. |