Freigeben über


Lock: Eskalation-Ereignisklasse

Die Lock:Escalation-Ereignisklasse gibt an, dass eine feiner gekörnte Sperre in eine grober gekörnte Sperre konvertiert wurde; Beispielsweise eine Zeilensperre, die in eine Objektsperre konvertiert wird. Die Eskalationsereignisklasse ist Ereignis-ID 60.

Lock: Eskalationsereignis-Klassendatenspalten

Datenspaltenname Datentyp BESCHREIBUNG Spalten-ID Filterbar
ApplicationName nvarchar Name der Clientanwendung, die die Verbindung mit einer Instanz von SQL Server erstellt hat. Diese Spalte wird mit den Werten aufgefüllt, die von der Anwendung übergeben werden, und nicht mit dem angezeigten Namen des Programms. 10 Ja
ClientProcessID int Die ID, die der Hostcomputer dem Prozess zuweist, in dem die Clientanwendung ausgeführt wird. Diese Datenspalte wird aufgefüllt, wenn der Client die Clientprozess-ID angibt. 9 Ja
DatabaseID int ID der Datenbank, in der die Sperre erworben wurde. SQL Server Profiler zeigt den Namen der Datenbank an, wenn die ServerName -Datenspalte in der Ablaufverfolgung aufgezeichnet wird und der Server verfügbar ist. Der Wert für eine Datenbank kann mithilfe der DB_ID-Funktion ermittelt werden. 3 Ja
DatabaseName nvarchar Name der Datenbank, in der die Eskalation aufgetreten ist. 35 Ja
EventClass int Typ des Ereignisses = 60. 27 Nein
EventSubClass int Ursache der Sperreskalation:

0 - LOCK_THRESHOLD gibt an, dass die Anweisung den Sperrschwellenwert überschritten hat.

1 – MEMORY_THRESHOLD gibt an, dass die Anweisung den Speicherschwellenwert überschritten hat.
21 Ja
EventSequence int Sequenz eines bestimmten Ereignisses innerhalb der Anforderung. 51 Nein
GroupID int ID der Arbeitsauslastungsgruppe, in der das SQL-Ablaufverfolgungsereignis ausgelöst wird. 66 Ja
HostName nvarchar Der Name des Computers, auf dem der Client ausgeführt wird. Diese Datenspalte wird aufgefüllt, wenn der Hostname vom Client bereitgestellt wird. Verwenden Sie die HOST_NAME -Funktion, um den Hostnamen zu bestimmen. 8 Ja
IntegerData int Anzahl der HoBT-Sperren. Die Anzahl der Sperren für das HoBT zum Zeitpunkt der Sperreskalation. 25 Ja
IntegerData2 int Erhöhte Sperrzähler. Die Gesamtanzahl der Schlösser, die konvertiert wurden. Diese Sperrstrukturen werden freigegeben, da sie bereits durch die eskalierte Sperre abgedeckt sind. 55 Ja
IsSystem int Gibt an, ob das Ereignis bei einem Systemprozess oder einem Benutzerprozess aufgetreten ist. 1 = System, 0 = Benutzer. 60 Ja
Linenumber int Zeilennummer der Transact-SQL-Anweisung. 5 Ja
LoginName nvarchar Name der Anmeldung des Benutzers (entweder SQL Server-Sicherheitsanmeldung oder Microsoft Windows-Anmeldeinformationen in Form von DOMÄNE\Benutzername). 11 Ja
LoginSid image Sicherheits-ID (SID) des angemeldeten Benutzers. Diese Informationen finden Sie in der sys.server_principals -Katalogsicht. Die SID ist für jede Anmeldung beim Server eindeutig. 41 Ja
Modus int Resultierender Sperrmodus nach der Eskalation:

0=NULL - Kompatibel mit allen anderen Sperrmodi (LCK_M_NL)

1=Schemastabilitätssperre (LCK_M_SCH_S)

2=Schemaänderungssperre (LCK_M_SCH_M)

3=Freigegebene Sperre (LCK_M_S)

4=Updatesperre (LCK_M_U)

5=Exklusive Sperre (LCK_M_X)

6=Freigegebene Absichtssperre (LCK_M_IS)

7=Absichtsaktualisierungssperre (LCK_M_IU)

8=Intent Exclusive Lock (LCK_M_IX)

9=Für Aktualisierung freigegeben (LCK_M_SIU)

10=Mit Intent exklusiv geteilt (LCK_M_SIX)

11=Aktualisierung mit exklusiver Absicht (LCK_M_UIX)

12=Massenaktualisierungssperre (LCK_M_BU)

13=Schlüsselbereich Freigegeben/Freigegeben (LCK_M_RS_S)

14=Schlüsselbereich geteilt/Aktualisierung (LCK_M_RS_U)

15=Schlüsselbereich NULL-Einfügen (LCK_M_RI_NL)

16=Schlüsselbereich gemeinsam einfügen (LCK_M_RI_S)

17=Key Range Insert Update (LCK_M_RI_U)

18=Schlüsselbereichs-Einfügen exklusiv (LCK_M_RI_X)

19=Schlüsselbereich exklusiv geteilt (LCK_M_RX_S)

20=Key Range Exclusive Update (LCK_M_RX_U)

21=Schlüsselbereich Ausschließlich Ausschließlich (LCK_M_RX_X)
32 Ja
NTDomainName nvarchar Windows-Domäne, zu der der Benutzer gehört. 7 Ja
NTUserName nvarchar Windows-Benutzername. 6 Ja
ObjectID int Vom System zugewiesene ID der Tabelle, für die die Sperreskalation ausgelöst wurde. 22 Ja
ObjectID2 bigint ID des zugehörigen Objekts oder der zugehörigen Entität. (HoBT-ID, für die die Lock-Eskalation ausgelöst wurde.) 56 Ja
Offset- int Der Start-Offset der Transact-SQL-Anweisung. 61 Ja
OwnerID int 1=TRANSAKTION

2=CURSOR

3=Sitzung

4=SHARED_TRANSACTION_WORKSPACE

5=EXKLUSIVER_TRANSAKTIONSARBEITSBEREICH

6=WAITFOR_QUERY
58 Ja
RequestID int Die ID der Anforderung, die die Anweisung enthält. 49 Ja
ServerName nvarchar Name der Instanz von SQL Server, die nachverfolgt wird. 26 Nein
SessionLoginName nvarchar Der Anmeldename des Benutzers, der die Sitzung gestartet hat. Wenn Sie beispielsweise mithilfe von Login1 eine Verbindung mit SQL Server herstellen und eine Anweisung als Login2 ausführen, zeigt SessionLoginName "Login1" und "LoginName " "Login2" an. In dieser Spalte werden sowohl SQL Server- als auch Windows-Anmeldungen angezeigt. 64 Ja
SPID int Die ID der Sitzung, in der das Ereignis aufgetreten ist. 12 Ja
StartTime datetime Zeitpunkt, zu dem das Ereignis begonnen hat (falls vorhanden). 14 Ja
TextData ntext Text der Anweisung Transact-SQL, die eine Eskalation der Sperre verursacht hat. 1 Ja
TransactionID bigint Die vom System zugewiesene ID der Transaktion. 4 Ja
Typ int Granularität der Sperreneskalation

1=NULL_RESOURCE

2=DATENBANK

3=DATEI

5=OBJECT (Tabellenebene)

6=SEITE

7=SCHLÜSSEL

8=UMFANG

9=RID

10=ANWENDUNG

11=METADATEN

12=HOBT

13=ALLOCATION_UNIT
57 Ja

Beispiele

Im folgenden Beispiel wird das Verfahren sp_trace_create zum Erstellen einer Ablaufverfolgung verwendet, danach sp_trace_setevent zum Hinzufügen von Sperreskalationsspalten zur Ablaufverfolgung und schließlich sp_trace_setstatus zum Starten der Ablaufverfolgung. In Anweisungen wie EXEC sp_trace_setevent @TraceID, 60, 22, 1z. B. gibt die Zahl 60 die Eskalationsereignisklasse an, 22 gibt die ObjectID-Spalte an und 1 legt das Ablaufverfolgungsereignis auf ON fest.

DECLARE @RC int, @TraceID int;  
EXEC @rc = sp_trace_create @TraceID output, 0, N'C:\TraceResults';  
-- Set the events and data columns you need to capture.  
EXEC sp_trace_setevent @TraceID, 60,  1, 1; --  1 = TextData  
EXEC sp_trace_setevent @TraceID, 60, 12, 1; -- 12 = SPID  
EXEC sp_trace_setevent @TraceID, 60, 21, 1; -- 21 = EventSubClass  
EXEC sp_trace_setevent @TraceID, 60, 22, 1; -- 22 = ObjectID  
EXEC sp_trace_setevent @TraceID, 60, 25, 1; -- 25 = IntegerData  
EXEC sp_trace_setevent @TraceID, 60, 55, 1; -- 25 = IntegerData2  
EXEC sp_trace_setevent @TraceID, 60, 57, 1; -- 57 = Type  
-- Set any filter  by using sp_trace_setfilter.  
-- Start the trace.  
EXEC sp_trace_setstatus @TraceID, 1;  
GO  

Da die Ablaufverfolgung jetzt läuft, führen Sie die Anweisungen aus, die Sie protokollieren möchten. Führen Sie nach Abschluss der Ausführung den folgenden Code aus, um die Protokollierung zu beenden und dann zu schließen. In diesem Beispiel wird die fn_trace_getinfo-Funktion verwendet, um die traceid in den sp_trace_setstatus-Anweisungen zu verwenden.

-- After the trace is complete.  
DECLARE @TraceID int;  
-- Find the traceid of the current trace.  
SELECT @TraceID = traceid   
FROM ::fn_trace_getinfo(default)   
WHERE value = N'C:\TraceResults.trc';  
  
-- First stop the trace.   
EXEC sp_trace_setstatus @TraceID, 0;  
  
-- Close and then delete its definition from SQL Server.   
EXEC sp_trace_setstatus @TraceID, 2;  
GO  

Siehe auch

sp_trace_setevent (Transact-SQL)
sys.dm_tran_locks (Transact-SQL)