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 :
|
Instruction |
Type d'instruction. Les valeurs possibles sont :
|
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.