Classe d'événements Lock:Escalation

La classe d'événements Lock:Escalation indique qu'un verrouillage spécifique s'est transformé en verrouillage de plus grande ampleur, comme par exemple un verrou de ligne transformé en verrou d'objet. La classe d'événements Escalation est l'ID d'événement 60.

Colonnes de données de la classe d'événements Lock:Escalation

Nom de la colonne de données

Type de données

Description

ID de colonne

Filtrable

ApplicationName

nvarchar

Nom de l'application cliente qui a créé la connexion à une instance de SQL Server. Cette colonne est remplie des valeurs transmises par l'application et non pas du nom affiché du programme.

10

Oui

ClientProcessID

int

ID affecté par l'ordinateur hôte au processus dans lequel s'exécute l'application cliente. Cette colonne de données est remplie si le client fournit l'ID du processus de client.

9

Oui

DatabaseID

int

ID de la base de données dans laquelle a été acquis le verrou. Le SQL Server Profiler affiche le nom de la base de données si la colonne de données ServerName est capturée dans la trace et si le serveur est disponible. Détermine la valeur pour une base de données à l'aide de la fonction DB_ID.

3

Oui

DatabaseName

nvarchar

Nom de la base de données dans laquelle a eu lieu la promotion.

35

Oui

EventClass

int

Type d'événement = 60.

27

Non

EventSubClass

int

Cause de l'escalade de verrous :

0 - LOCK_THRESHOLD indique que l'instruction a dépassé le seuil de verrou.

1 - MEMORY_THRESHOLD indique que l'instruction a dépassé le seuil de la mémoire.

21

Oui

EventSequence

int

Séquence d'un événement donné dans la demande.

51

Non

GroupID

int

ID du groupe de charges de travail où l'événement SQL Trace se déclenche.

66

Oui

HostName

nvarchar

Nom de l'ordinateur sur lequel le client est exécuté. Cette colonne de données est remplie si le client fournit le nom d'hôte. Pour déterminer le nom de l'hôte, utilisez la fonction HOST_NAME.

8

Oui

IntegerData

int

Nombre de verrous HoBT. Nombre de verrous pour HoBT au moment de l'escalade de verrous.

25

Oui

IntegerData2

int

Nombre de verrous escaladés. Nombre total des verrous convertis. Ces structures de verrou sont libérées parce qu'elles sont déjà couvertes par le verrou escaladé.

55

Oui

IsSystem

int

Indique si l'événement s'est produit sur un processus système ou sur un processus utilisateur. 1 = système, 0 = utilisateur.

60

Oui

LineNumber

int

Numéro de ligne de l'instruction Transact-SQL.

5

Oui

LoginName

nvarchar

Nom de la connexion de l'utilisateur (soit la connexion de sécurité SQL Server, soit les informations d'identification de connexion Microsoft Windows sous la forme DOMAINE\nom_utilisateur).

11

Oui

LoginSid

image

Numéro d'identification de sécurité (SID) de l'utilisateur connecté. Vous pouvez trouver ces informations dans l'affichage catalogue sys.server_principals. Chaque SID est unique pour chaque connexion du serveur.

41

Oui

Mode

int

Mode de verrouillage obtenu après l'escalade :

0=NULL - Compatible avec tous les autres modes de verrouillage (LCK_M_NL)

1=Verrou de stabilité de schéma (LCK_M_SCH_S)

2=Verrou de modification de schéma (LCK_M_SCH_M)

3=Verrou partagé (LCK_M_S)

4=Verrou de mise à jour (LCK_M_U)

5=Verrou exclusif (LCK_M_X)

6=Verrou intent partagé (LCK_M_IS)

7=Verrou intent de mise à jour (LCK_M_IU)

8=Verrou intent exclusif (LCK_M_IX)

9=Partagé avec intention de mise à jour (LCK_M_SIU)

10=Partagé avec intent exclusif (LCK_M_SIX)

11=Mise à jour avec intent exclusif (LCK_M_UIX)

12=Verrou Bulk Update (LCK_M_BU)

13=Verrou de clés partagé/de ressources partagé (LCK_M_RS_S)

14=Verrou de clés partagé/de mise à jour de ressources(LCK_M_RS_U)

15=Verrou de clés d'insertion/de ressources NULL (LCK_M_RI_NL)

16=Verrou de clés d'insertion/partagé (LCK_M_RI_S)

17=Verrou de clés d'insertion/de mise à jour (LCK_M_RI_U)

18=Verrou de clés d'insertion/exclusif (LCK_M_RI_X)

19=Verrou de clés exclusif/partagé (LCK_M_RX_S)

20=Verrou de clés exclusif/de mise à jour (LCK_M_RX_U)

21=Verrou de clés exclusif/exclusif (LCK_M_RX_X)

32

Oui

NTDomainName

nvarchar

Domaine Windows auquel appartient l'utilisateur.

7

Oui

NTUserName

nvarchar

Nom d'utilisateur Windows.

6

Oui

ObjectID

int

ID assigné par système de la table pour laquelle l'escalade de verrous a été déclenchée.

22

Oui

ObjectID2

bigint

ID de l'objet ou de l'entité associé. (ID HoBT pour lequel l'escalade de verrous a été déclenchée.)

56

Oui

Offset

int

Décalage de départ de l'instruction Transact-SQL.

61

Oui

OwnerID

int

1=TRANSACTION

2=CURSOR

3=SESSION

4=SHARED_TRANSACTION_WORKSPACE

5=EXCLUSIVE_TRANSACTION_WORKSPACE

6=WAITFOR_QUERY

58

Oui

RequestID

int

ID de la demande contenant l'instruction.

49

Oui

ServerName

nvarchar

Nom de l'instance de SQL Server tracée.

26

Non

SessionLoginName

nvarchar

Nom de connexion de l'utilisateur à l'origine de la session. Par exemple, si vous vous connectez à SQL Server à l'aide de Connexion1 et exécutez une instruction en tant que Connexion2, SessionLoginName affiche Connexion1, tandis que LoginName affiche Connexion2. Cette colonne affiche les connexions SQL Server et Windows.

64

Oui

SPID

int

ID de la session sur laquelle l'événement s'est produit.

12

Oui

StartTime

datetime

Heure de début de l'événement, si disponible.

14

Oui

TextData

ntext

Texte de l'instruction Transact-SQL qui a provoqué l'escalade de verrous.

1

Oui

TransactionID

bigint

ID affecté par le système à la transaction.

4

Oui

Type

int

Granularité de l'escalade de verrous :

1=NULL_RESOURCE

2=DATABASE

3=FILE

5=OBJECT (niveau table)

6=PAGE

7=KEY

8=EXTENT

9=RID

10=APPLICATION

11=METADATA

12=HOBT

13=ALLOCATION_UNIT

57

Oui

Exemples

L'exemple suivant utilise la procédure sp_trace_create pour créer une trace, utilise sp_trace_setevent pour ajouter des colonnes d'escalade de verrous à la trace, puis utilise sp_trace_setstatus pour démarrer la trace. Dans les instructions telles que EXEC sp_trace_setevent @TraceID, 60, 22, 1, le nombre 60 désigne la classe d'événements d'escalade, 22 désigne la colonne ObjectID et 1 affecte à l'événement de trace la valeur 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

Maintenant que la trace s'exécute, exécutez les instructions que vous souhaitez tracer. Une fois ces instructions terminées, exécutez le code suivant pour arrêter et puis fermer la trace. Cet exemple utilise la fonction fn_trace_getinfo pour utiliser traceid dans les instructions 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