Udostępnij za pomocą


Blokada: Klasa Zdarzenia Eskalacji

Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Klasa zdarzeń Lock:Escalation wskazuje, że zamek o drobniejszym ziarnistwie został przekształcony w zamek o grubszym ziarnistwie; na przykład blokada wierszowa, która jest przekształcana w blokadę obiektową. Klasa zdarzenia eskalacyjnego to Event ID 60.

Kolumny danych Lock:Escalation Event Class

Nazwa kolumny danych Typ danych Description Identyfikator kolumny Filtrowanie
Nazwa aplikacji nvarchar Nazwa aplikacji klienckiej, która utworzyła połączenie z wystąpieniem programu SQL Server. Ta kolumna jest wypełniana wartościami przekazywanymi przez aplikację, a nie wyświetlaną nazwą programu. 10 Tak
ClientProcessID int Identyfikator przypisany przez komputer hosta do procesu, w którym działa aplikacja kliencka. Ta kolumna danych jest wypełniana, jeśli klient poda identyfikator procesu klienta. 9 Tak
DatabaseID int Identyfikacja bazy danych, w której zamek został uzyskany. SQL Server Profiler wyświetla nazwę bazy danych, jeśli kolumna danych ServerName jest zarejestrowana w śledzeniu i serwer jest dostępny. Określ wartość bazy danych przy użyciu funkcji DB_ID. 3 Tak
Nazwa bazy danych nvarchar Nazwa bazy danych, w której doszło do eskalacji. 35 Tak
EventClass int Typ zdarzenia = 60. 27 Nie.
EventSubClass int Przyczyna eskalacji zamka:

0 - LOCK_THRESHOLD oznacza, że oświadczenie przekroczyło próg blokady.

1 - MEMORY_THRESHOLD oznacza, że oświadczenie przekroczyło próg pamięci.
dwadzieścia jeden Tak
EventSequence int Sekwencja danego zdarzenia w żądaniu. 51 Nie.
GroupID int Identyfikator grupy obciążenia, w której jest uruchamiane zdarzenie śledzenia SQL. 66 Tak
Nazwa hosta nvarchar Nazwa komputera, na którym jest uruchomiony klient. Ta kolumna danych jest wypełniana, jeśli klient poda nazwę hosta. Aby określić nazwę hosta, użyj funkcji HOST_NAME. 8 Tak
IntegerData int Liczba zamków HoBT. Liczba zamków dla HoBT w momencie eskalacji zamki. 25 Tak
IntegerData2 int Liczba zamków wzrosła. Całkowita liczba śluz, które zostały przerobione. Te struktury śluzowe są delokowane, ponieważ są już objęte eskalowaną śluzą. 55 Tak
IsSystem int Wskazuje, czy zdarzenie miało miejsce w procesie systemowym, czy w procesie użytkownika. 1 = system, 0 = użytkownik. 60 Tak
Linenumber int Numer linii Transact-SQL oświadczenia. 5 Tak
Nazwa loginName nvarchar Nazwa logowania użytkownika (albo SQL Server security login, albo dane logowania Microsoft Windows w formie DOMAIN\username). 11 Tak
LoginSid image Numer identyfikacyjny zabezpieczeń (SID) zalogowanego użytkownika. Informacje te znajdziesz w widoku katalogu sys.server_principals . Każdy identyfikator SID jest unikatowy dla każdego identyfikatora logowania na serwerze. 41 Tak
Tryb int Powstały tryb blokady po eskalacji:

0=NULL - Kompatybilny ze wszystkimi innymi trybami blokady (LCK_M_NL)

1=Blokada stabilności schematu (LCK_M_SCH_S)

2=Zamek modyfikacji schematu (LCK_M_SCH_M)

3=Współdzielony zamek (LCK_M_S)

4=Blokada aktualizacji (LCK_M_U)

5=Wyłączny zamek (LCK_M_X)

6=Zamek współdzielony na zamiar (LCK_M_IS)

7=Blokada aktualizacji zamiaru (LCK_M_IU)

8=Wyłączny zamek na zamiar (LCK_M_IX)

9=Udostępniono z zamiarem aktualizacji (LCK_M_SIU)

10=Udostępnione wyłącznie z intencją (LCK_M_SIX)

11=Aktualizacja z wyłącznym zamiarem (LCK_M_UIX)

12=Blokada aktualizacji masowej (LCK_M_BU)

13=Zakres kluczy współdzielony/współdzielony (LCK_M_RS_S)

14=Zakres kluczy udostępniony/aktualizowany (LCK_M_RS_U)

15=Wstaw zakresu kluczy NULL (LCK_M_RI_NL)

16=Wspólny wstaw zakresu kluczy (LCK_M_RI_S)

17=Aktualizacja zakresu kluczy (LCK_M_RI_U)

18=Ekskluzywne wstawianie w zakresie kluczy (LCK_M_RI_X)

19=Wyłączny zakres kluczy współdzielony (LCK_M_RX_S)

20=Ekskluzywna aktualizacja zakresu kluczy (LCK_M_RX_U)

21=Ekskluzywne w zakresie kluczy (LCK_M_RX_X)
32 Tak
NTDomainName nvarchar Domena systemu Windows, do której należy użytkownik. 7 Tak
NTUserName nvarchar Nazwa użytkownika systemu Windows. 6 Tak
ObjectID int Identyfikator przypisany przez system tabeli, dla której wywołano eskalację blokady. 22 Tak
ObjectID2 bigint ID powiązanego obiektu lub jednostki. (Identyfikator HoBT, dla którego eskalacja blokady została wywołana.) 56 Tak
Przesunięcie int Zaczynam od przesunięcia Transact-SQL oświadczenia. 61 Tak
OwnerID int 1=TRANSAKCJA

2=KURSOR

3=SESJA

4=SHARED_TRANSACTION_WORKSPACE

5=EXCLUSIVE_TRANSACTION_WORKSPACE

6=WAITFOR_QUERY
58 Tak
RequestID int Identyfikator żądania zawierającego instrukcję . 49 Tak
Nazwa serwera nvarchar Nazwa śledzonego wystąpienia programu SQL Server. 26 Nie.
SessionLoginName nvarchar Nazwa logowania użytkownika, który utworzył sesję. Na przykład, jeśli połączysz się z SQL Server za pomocą Login1 i wykonasz polecenie jako Login2, SessionLoginName pokazuje Login1, a LoginName pokazuje Login2. W tej kolumnie są wyświetlane zarówno identyfikatory logowania programu SQL Server, jak i systemu Windows. 64 Tak
SPID int Identyfikator sesji, w której wystąpiło zdarzenie. 12 Tak
Godzina rozpoczęcia datetime Godzina rozpoczęcia zdarzenia, jeśli jest dostępna. 14 Tak
TextData ntext Tekst Transact-SQL oświadczenia, które spowodowało eskalację blokady. 1 Tak
TransactionID bigint Przypisany przez system identyfikator transakcji. 4 Tak
Typ int Granularność eskalacji blokady:

1=NULL_RESOURCE

2=BAZA DANYCH

3=PLIK

5=OBIEKT (poziom tabeli)

6=STRONA

7=KLUCZ

8=ZASIĘG

9=RID

10=ZASTOSOWANIE

11=METADANE

12=HOBT

13=ALLOCATION_UNIT
57 Tak

Przykłady

Poniższy przykład wykorzystuje procedurę sp_trace_create tworzenia śladu, sp_trace_setevent dodaje kolumny eskalacji blokad do śledzenia, a następnie uruchamia sp_trace_setstatus śledzenie. W instrukcjach takich jak EXEC sp_trace_setevent @TraceID, 60, 22, 1, liczba 60 wskazuje klasę zdarzenia eskalacyjnego, 22 wskazuje kolumnę ObjectID i ustawia 1 zdarzenie śledzenia na ON.

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  

Teraz, gdy ślad jest uruchomiony, wykonaj instrukcje, które chcesz prześledzić. Po zakończeniu wykonaj następujący kod, aby zatrzymać i zamknąć ślad. W tym przykładzie funkcja służy fn_trace_getinfo do użycia do traceid instrukcji sp_trace_setstatus .

-- 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  

Zobacz też

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