Condividi tramite


Classe di evento Lock:Escalation

La classe di evento Lock:Escalation indica che un blocco con granularità fine è stato convertito in un blocco con granularità grossolana, ad esempio un blocco di riga è stato convertito in blocco di oggetto. La classe di evento dell'escalation è l'ID evento 60.

Colonne di dati della classe di evento Lock:Escalation

Nome colonna di dati

Tipo di dati

Descrizione

ID colonna

Filtrabile

ApplicationName

nvarchar

Nome dell'applicazione client in cui è stata creata la connessione a un'istanza di SQL Server. Questa colonna viene popolata con i valori passati dall'applicazione anziché con il nome visualizzato del programma.

10

ClientProcessID

int

ID assegnato dal computer host al processo in cui è in esecuzione l'applicazione client. Questa colonna di dati viene popolata se il client fornisce l'ID del processo client.

9

DatabaseID

int

ID del database in cui è stato acquisito il blocco. In SQL Server Profiler viene visualizzato il nome del database se l'acquisizione per la traccia include la colonna di dati ServerName e il server è disponibile. È possibile determinare il valore per un database utilizzando la funzione DB_ID.

3

DatabaseName

nvarchar

Nome del database in cui si è verificata l'escalation.

35

EventClass

int

Tipo di evento = 60.

27

No

EventSubClass

int

Causa dell'escalation dei blocchi:

0 - LOCK_THRESHOLD indica che l'istruzione supera la soglia del blocco.

1 - MEMORY_THRESHOLD indica che l'istruzione supera la soglia di memoria.

21

EventSequence

int

Sequenza di un determinato evento nella richiesta.

51

No

GroupID

int

ID del gruppo del carico di lavoro dove l'evento Traccia SQL provoca l'attivazione.

66

HostName

nvarchar

Nome del computer in cui è in esecuzione il client. Questa colonna di dati viene popolata se il client fornisce il nome host. Per determinare il nome host, utilizzare la funzione HOST_NAME.

8

IntegerData

int

Conteggio dei blocchi HoBT. Numero di blocchi HoBT al momento dell'escalation dei blocchi.

25

IntegerData2

int

Conteggio dei blocchi alzati di livello. Numero totale di blocchi convertiti. Queste strutture di blocco vengono deallocate poiché già coperte dal blocco alzato di livello.

55

IsSystem

int

Indica se l'evento si è verificato in un processo di sistema o in un processo utente. 1 = sistema, 0 = utente.

60

LineNumber

int

Numero di riga dell'istruzione Transact-SQL.

5

LoginName

nvarchar

Nome dell'account di accesso dell'utente (account di protezione di SQL Server o credenziali di accesso di Microsoft Windows nel formato DOMINIO\nomeutente).

11

LoginSid

image

ID di protezione (SID) dell'utente connesso. Queste informazioni sono disponibili nella vista del catalogo sys.server_principals. Il SID è univoco per ogni account di accesso nel server.

41

Mode

int

Modalità di blocco risultante dopo l'escalation:

0=NULL - Compatibile con tutte le altre modalità di blocco (LCK_M_NL)

1=Blocco di stabilità dello schema (LCK_M_SCH_S)

1=Blocco di modifica dello schema (LCK_M_SCH_M)

3=Blocco condiviso (LCK_M_S)

4=Blocco di aggiornamento (LCK_M_U)

5=Blocco esclusivo (LCK_M_X)

6=Blocco condiviso preventivo (LCK_M_IS)

7=Blocco di aggiornamento preventivo (LCK_M_IU)

8=Blocco esclusivo preventivo (LCK_M_IX)

9=Condiviso-Preventivo-Aggiornamento (LCK_M_SIU)

10=Condiviso-Preventivo-Esclusivo (LCK_M_SIX)

10=Aggiornamento-Preventivo-Esclusivo (LCK_M_SIX)

12=Blocco aggiornamenti bulk (LCK_M_BU)

13=Intervalli di chiavi-Condiviso/Condiviso (LCK_M_RS_S)

14=Intervalli di chiavi-Condiviso/Aggiornamento (LCK_M_RS_U)

15=Intervalli di chiavi-Inserimento-NULL (LCK_M_RI_NL)

16=Intervalli di chiavi-Inserimento-Condiviso (LCK_M_RI_S)

17=Intervalli di chiavi-Inserimento-Aggiornamento (LCK_M_RI_U)

18=Intervalli di chiavi-Inserimento-Esclusivo (LCK_M_RI_X)

19=Intervalli di chiavi-Esclusivo-Condiviso (LCK_M_RX_S)

20=Intervalli di chiavi-Esclusivo-Aggiornamento (LCK_M_RX_U)

21=Intervalli di chiavi-Esclusivo-Esclusivo (LCK_M_RX_X)

32

NTDomainName

nvarchar

Dominio di Windows a cui appartiene l'utente.

7

NTUserName

nvarchar

Nome utente di Windows.

6

ObjectID

int

ID assegnato dal sistema della tabella per la quale è stata generata l'escalation dei blocchi.

22

ObjectID2

bigint

ID dell'entità o dell'oggetto correlato. (ID HoBT per il quale è stata generata l'escalation dei blocchi).

56

Offset

int

Offset iniziale dell'istruzione Transact-SQL.

61

OwnerID

int

1=TRANSACTION

2=CURSOR

3=SESSION

4=SHARED_TRANSACTION_WORKSPACE

5=EXCLUSIVE_TRANSACTION_WORKSPACE

6=WAITFOR_QUERY

58

RequestID

int

ID della richiesta contenente l'istruzione.

49

ServerName

nvarchar

Nome dell'istanza di SQL Server tracciata.

26

No

SessionLoginName

nvarchar

Nome dell'account di accesso dell'utente che ha avviato la sessione. Ad esempio, se si attiva la connessione a SQL Server con l'account di accesso Login1 e si esegue un'istruzione con l'account di accesso Login2, SessionLoginName indica Login1 e LoginName indica Login2. In questa colonna vengono visualizzati sia gli account di accesso di SQL Server che quelli di Windows.

64

SPID

int

ID della sessione in cui si è verificato l'evento.

12

StartTime

datetime

Ora di inizio dell'evento, se disponibile.

14

TextData

ntext

Testo dell'istruzione Transact-SQL che provoca l'escalation dei blocchi.

1

TransactionID

bigint

ID della transazione assegnato dal sistema.

4

Type

int

Granularità dell'escalation dei blocchi:

1=NULL_RESOURCE

2=DATABASE

3=FILE

5=OBJECT (livello della tabella)

6=PAGE

7=KEY

8=EXTENT

9=RID

10=APPLICATION

11=METADATA

12=HOBT

13=ALLOCATION_UNIT

57

Esempi

Nel seguente esempio viene utilizzata la procedura sp_trace_create per creare una traccia, viene utilizzato sp_trace_setevent per aggiungere colonne dell'escalation dei blocchi alla traccia, quindi sp_trace_setstatus per avviare la traccia. In istruzioni come EXEC sp_trace_setevent @TraceID, 60, 22, 1, il numero 60 indica la classe di evento dell'escalation, 22 indica la colonna ObjectID e 1 imposta l'evento di traccia su 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  byusing sp_trace_setfilter.
-- Start the trace.
EXEC sp_trace_setstatus @TraceID, 1
GO

Dal momento che la traccia è in esecuzione, eseguire le istruzioni che si desidera creare una traccia. Una volta terminato, eseguire il seguente codice per interrompere e chiudere la traccia. Nell'esempio seguente viene utilizzata la funzione fn_trace_getinfo affinché traceid venga utilizzato nelle istruzioni 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