Partager via


Analyse des blocages à l'aide du Générateur de profils SQL Server

Utilisez le SQL Server Profiler pour identifier la cause d'un blocage. Un blocage se produit quand il y a une dépendance cyclique entre au moins deux threads ou processus pour un jeu de ressources dans SQL Server. Le SQL Server Profiler vous permet de créer une trace qui enregistre, relit et affiche les événements de blocage dans le cadre d'une analyse.

Pour tracer les événements de blocage, ajoutez la classe d'événements Deadlock graph à une trace. Cette classe d'événements remplit la colonne de données TextData de la trace avec des données XML relatives aux processus et aux objets impliqués dans le blocage. Le SQL Server Profiler peut extraire le document XML vers un fichier XML de blocages (.xdl), que vous pouvez visualiser ultérieurement dans SQL Server Management Studio. Vous pouvez configurer le SQL Server Profiler de manière à extraire les événements Deadlock graph vers un fichier unique contenant tous les événements Deadlock graph, ou bien vers des fichiers distincts. Cette extraction peut être réalisée de l'une des manières suivantes :

  • au moment de la configuration de la trace, à l'aide de l'onglet Paramètres d'extraction des événements. Cet onglet n'apparaît que si vous sélectionnez l'événement Deadlock graph dans l'onglet Sélection des événements.

  • à l'aide de l'option Extraire les événements SQL Server du menu Fichier.

  • vous pouvez également extraire et enregistrer un événement donné en cliquant avec le bouton droit sur celui-ci et en choisissant Extraire les données d'événement.

Graphiques de blocage

Le SQL Server Profiler et SQL Server Management Studio utilisent un graphique WAITFOR de blocage pour décrire un blocage. Le graphique WAITFOR de blocage contient des nœuds de processus, des nœuds de ressources et des arêtes qui représentent les relations entre les processus et les ressources. Les composants des graphiques WAITFOR sont définis dans la table suivante :

  • Nœud de processus
    Thread qui réalise une tâche ; par exemple, INSERT, UPDATE ou DELETE.

  • Nœud de ressource
    Objet de base de données ; par exemple, une table, un index ou une ligne.

  • Arête
    Relation entre un processus et une ressource. Une arête request se produit lorsqu'un processus attend une ressource. Une arête owner se produit lorsqu'une ressource attend un processus. Le mode de verrouillage est inclus dans la description des arêtes. Par exemple, Mode : X. Pour plus d'informations sur les valeurs pouvant désigner les modes de verrouillage, consultez Modes de verrouillage.

Nœud de processus de blocage

Dans un graphique WAITFOR, le nœud de processus contient des informations sur le processus. Le tableau suivant décrit les composants d'un processus.

Composant

Définition

ID de processus serveur

SPID, identificateur affecté par un serveur pour le processus détenant le verrou.

ID de traitement du serveur

Identificateur de traitement du serveur (SBID).

ID du contexte d'exécution

Identificateur du contexte d'exécution (ECID). ID de contexte d'exécution d'un thread particulier associé à un SPID spécifique

ECID = {0,1,2,3, ...n}, où 0 représente toujours le thread principal ou parent et {1,2,3, ...n} les sous-threads.

Priorité de blocage

Priorité de blocage du processus. Pour plus d'informations sur les valeurs possibles, consultez SET DEADLOCK_PRIORITY (Transact-SQL).

Journal utilisé

Quantité d'espace journal utilisée par le processus.

ID de propriétaire

ID de transaction des processus qui utilisent des transactions et qui attendent un verrou.

Descripteur de transaction

Pointeur vers le descripteur de transaction qui décrit l'état de la transaction.

Mémoire tampon d'entrée

Mémoire tampon d'entrée du processus actuel, qui définit le type d'événement et l'instruction en cours d'exécution. Les valeurs possibles sont :

  • Language

  • RPC

  • None

Instruction

Type d'instruction. Les valeurs possibles sont :

  • NOP

  • SELECT

  • UPDATE

  • INSERT

  • DELETE

  • Unknown

Nœud de ressource de blocage

Dans un blocage, chacun des deux processus attend une ressource détenue par l'autre processus. Dans un graphique de blocage, les ressources apparaissent sous la forme de nœuds de ressources. Chaque ressource appartient à l'un des types répertoriés dans Granularité et hiérarchie des verrous.