sp_lock (Transact-SQL)
Stellt Informationen zu Sperren bereit.
Wichtig |
---|
Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Wenn Sie weitere Informationen zu Sperren in SQL Server Database Engine (Datenbankmodul) erhalten möchten, verwenden Sie die dynamische Verwaltungssicht sys.dm_tran_locks. |
Syntax
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
Argumente
[ @spid1 = ] 'session ID1'
Eine Sitzungs-ID (SPID in SQL Server 2000 und früher) von Database Engine (Datenbankmodul) aus sys.dm_exec_sessions, für die der Benutzer Informationen zu Sperren wünscht. session ID1 ist vom Datentyp int. Der Standardwert ist NULL. Führen Sie sp_who aus, um Prozessinformationen zur Sitzung zu erhalten. Wenn session ID1 nicht angegeben wird, werden Informationen zu allen Sperren angezeigt.[ @spid2 = ] 'session ID2'
Eine weitere Sitzungs-ID von Database Engine (Datenbankmodul) aus sys.dm_exec_sessions, die möglicherweise gleichzeitig mit session ID1 gesperrt ist und zu der der Benutzer ebenfalls Informationen wünscht. session ID2 ist vom Datentyp int. Der Standardwert ist NULL.
Rückgabecodewerte
0 (Erfolg)
Resultsets
Das Resultset von sp_lock enthält eine Zeile für jede Sperre, die von den in den Parametern @spid1 und @spid2 angegebenen Sitzungen aufrechterhalten wird. Wenn weder @spid1 noch @spid2 angegeben ist, meldet das Resultset die Sperren für alle Sitzungen, die in der Instanz von Database Engine (Datenbankmodul) gegenwärtig aktiviert sind.
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
spid |
smallint |
Die Sitzungs-ID von Database Engine (Datenbankmodul) für den Prozess, der die Sperre anfordert. |
dbid |
smallint |
Die ID der Datenbank, in der die Sperre aufrechterhalten wird. Sie können die DB_NAME()-Funktion zum Identifizieren der Datenbank verwenden. |
ObjId |
int |
Die ID des Objekts, auf dem die Sperre aufrechterhalten wird. Sie können die OBJECT_NAME()-Funktion in der verbundenen Datenbank zum Identifizieren des Objekts verwenden. Der Wert 99 ist ein Sonderfall, der auf eine Sperre auf einer der Systemseiten, die zum Aufzeichnen der Seitenzuordnungen in einer Datenbank verwendet wird, hinweist. |
IndId |
smallint |
Die ID des Indexes, auf dem die Sperre aufrechterhalten wird. |
Type |
nchar(4) |
Der Sperrentyp: RID = Eine Sperre einer einzelnen Zeile in einer Tabelle, die durch eine Zeilen-ID (Row Identifier, RID) gekennzeichnet ist. KEY = Eine Sperre in einem Index, die einen Bereich von Schlüsselwerten in serialisierbaren Transaktionen schützt. PAG = Sperre auf einer Daten- oder Indexseite. EXT = Sperre auf einem Block. TAB = Sperre für eine gesamte Tabelle, einschließlich aller Daten und Indizes. DB = Sperre für eine Datenbank. FIL = Sperre für eine Datenbankdatei. APP = Sperre für eine anwendungsspezifische Ressource. MD = Sperre für Metadaten oder Kataloginformationen. HBT = Sperre für einen Heap oder B-Struktur-Index. Diese Informationen sind in SQL Server unvollständig. AU = Sperre für eine Zuordnungseinheit. Diese Informationen sind in SQL Server unvollständig. |
Resource |
nchar(32) |
Der Wert, der die gesperrte Ressource identifiziert. Das Format des Werts ist von dem in der Typ-Spalte identifizierten Ressourentyp abhängig: Typ Wert: Ressource Wert RID: Ein Bezeichner, der das Format fileid:pagenumber:rid aufweist, wobei fileid die Datei identifiziert, die die Seite enthält, pagenumber, die Seite, die die Zeile enthält, und rid, die Zeile auf der Seite. fileid entspricht der file_id-Spalte in der sys.database_files-Katalogsicht. KEY: Eine hexadezimale Zahl, die intern von Database Engine (Datenbankmodul) verwendet wird. PAG: Eine Zahl, die das Format fileid:pagenumber aufweist, wobei fileid die Datei, die die Seite enthält, und pagenumber die Seite identifiziert. EXT: Eine Zahl, die die erste Seite im Block identifiziert. Die Zahl weist das Format fileid:pagenumber auf. TAB: Es werden keine Informationen bereitgestellt, da die Tabelle bereits in der ObjId-Spalte identifiziert ist. DB: Es werden keine Informationen bereitgestellt, da die Datenbank bereits in der dbid-Spalte identifiziert ist. FIL: Der Bezeichner der Datei, der mit der file_id-Spalte in der sys.database_files-Katalogsicht übereinstimmt. APP: Ein Bezeichner, der für die gesperrte Anwendungsressource eindeutig ist. Das verwendete Format ist DbPrincipleId:<Die ersten zwei bis 16 Zeichen der Ressourcenzeichenfolge><Hashwert>. MD: Variiert je nach Ressourcentyp. Weitere Informationen finden Sie in der Beschreibung der resource_description-Spalte in sys.dm_tran_locks (Transact-SQL). HBT: Keine Informationen verfügbar. Verwenden Sie stattdessen die dynamische Verwaltungssicht sys.dm_tran_locks. AU: Keine Informationen verfügbar. Verwenden Sie stattdessen die dynamische Verwaltungssicht sys.dm_tran_locks. |
Mode |
nvarchar(8) |
Der angeforderte Sperrmodus. Mögliche Werte sind: NULL = Auf die Ressource wird kein Zugriff erteilt. Dient als Platzhalter. Sch-S = Schemastabilität. Stellt sicher, dass ein Schemaelement, wie z. B. eine Tabelle oder ein Index, nicht gelöscht wird, während eine Sitzung eine Schemastabilitätssperre für das Schemaelement aufrechterhält. Sch-M = Schemaänderung. Muss von jeder Sitzung aufrechterhalten werden, die das Schema der angegebenen Ressource ändern möchte. Stellt sicher, dass keine anderen Sitzungen auf das angegebene Objekt verweisen. S = Freigegebene Sperre. Der haltenden Sitzung wird der gemeinsame Zugriff auf die Ressource erteilt. U = Aktualisierungssperre. Zeigt eine Aktualisierungssperre an, die für Ressourcen ausgegeben wurde, die möglicherweise aktualisiert werden. Sie wird dazu verwendet, eine häufige Form von Deadlock zu verhindern, die auftritt, wenn mehrere Sitzungen Ressourcen sperren, um diese möglicherweise zu einem späteren Zeitpunkt zu aktualisieren. X = Exklusive Sperre. Der haltenden Sitzung wird exklusiver Zugriff auf die Ressource erteilt. IS = Beabsichtigte freigegebene Sperre. Zeigt die Absicht an, S-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren. IU = Beabsichtigte Aktualisierungssperre. Zeigt die Absicht an, U-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren. IX = Beabsichtigte exklusive Sperre. Zeigt die Absicht an, X-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren. SIU = Freigegebene Sperre mit beabsichtigter Aktualisierungssperre. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, Aktualisierungssperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten. SIX = Freigegebene Sperre mit beabsichtigter exklusiver Sperre. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten. UIX = Aktualisierungssperre mit beabsichtigter exklusiver Sperre. Zeigt eine aufrechterhaltene Aktualisierungssperre für eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten. BU = Massenaktualisierungssperre. Wird von Massenvorgängen verwendet. RangeS_S = Freigegebene Sperren für Schlüsselbereich und Ressource. Zeigt serialisierbaren Bereichsscan an. RangeS_U = Freigegebene Sperre für Schlüsselbereich und Aktualisierungssperre für Ressource. Zeigt serialisierbaren Aktualisierungsscan an. RangeI_N = Einfügungssperre für Schlüsselbereich und NULL-Sperre für Ressource. Wird zum Testen von Bereichen verwendet, bevor ein neuer Schlüssel in einen Index eingefügt wird. RangeI_S = Konvertierungssperre für Schlüsselbereich (RangeI_S). Wird durch eine Überschneidung von RangeI_N und RangeS_S-Sperren erstellt. RangeI_U = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und U-Sperren erstellt wurde. RangeI_X = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und X-Sperren erstellt wurde. RangeX_S = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und RangeS_S-Sperren erstellt wurde. RangeX_U = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und RangeS_U-Sperren erstellt wurde. RangeX_X = Exklusive Sperren für Schlüsselbereich und Ressource. Dies ist eine Konvertierungssperre, die zur Aktualisierung eines Schlüssels in einem Bereich verwendet wird. |
Status |
nvarchar(5) |
Der Status der Sperranforderung: CNVRT: Die Sperre wird aus einem anderen Modus konvertiert, aber die Konvertierung wird durch einen anderen Prozess blockiert, der eine Sperre mit einem inkompatiblen Modus aufrechterhält. GRANT: Die Sperre wurde erteilt. WAIT: Die Sperre wird durch einen anderen Prozess blockiert, der eine Sperre mit einem inkompatiblen Modus aufrechterhält. |
Hinweise
Benutzer können das Sperren von Lesevorgängen wie folgt steuern:
Mit SET TRANSACTION ISOLATION LEVEL die Sperrebene für eine Sitzung angeben. Hinweise zur Syntax und zu Einschränkungen finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).
Mithilfe von Sperrhinweisen die Sperrebene für einen bestimmten Tabellenverweis in einer FROM-Klausel angeben. Hinweise zur Syntax und zu Einschränkungen finden Sie unter Tabellenhinweise (Transact-SQL).
Weitere Informationen zu den von Database Engine (Datenbankmodul) verwendeten Sperrtypen finden Sie unter Sperren im Datenbankmodul.
Alle verteilten Transaktionen, denen keine Sitzung zugeordnet ist, sind verwaiste Transaktionen. Database Engine (Datenbankmodul) weist allen verwaisten verteilten Transaktionen den SPID-Wert -2 zu, wodurch ein Benutzer blockierende verteilte Transaktionen leichter identifizieren kann. Weitere Informationen finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung.
Beispiele
A. Auflisten aller Sperren
Im folgenden Beispiel werden Informationen zu allen Sperren angezeigt, die zurzeit in einer Instanz von Database Engine (Datenbankmodul) bestehen.
USE master;
GO
EXEC sp_lock;
GO
B. Auflisten einer Sperre für einen Einzelserverprozess
Im folgenden Beispiel werden Informationen, einschließlich der Sperren, zur Prozess-ID 53 angezeigt.
USE master;
GO
EXEC sp_lock 53;
GO