La page Deadlock d'ApsaraDB RDS for SQL Server affiche des détails tels que les heures de début des transactions, les ID de session, les ressources verrouillées et les types d'interblocage. Ces informations vous aident à localiser et résoudre rapidement les instructions SQL problématiques à l'origine des interblocages. Cette rubrique explique comment consulter les interblocages et leurs détails pour une instance ApsaraDB RDS for SQL Server dans la console ApsaraDB RDS.
Informations générales
Lorsqu'une transaction modifie une ressource, elle applique un verrou afin d'empêcher d'autres transactions de la modifier, ce qui garantit la cohérence des données.
Un interblocage survient généralement lorsque plusieurs transactions entrent en concurrence pour l'accès aux ressources. Par exemple, la transaction A verrouille la ressource A et tente de modifier la ressource B, tandis que la transaction B verrouille la ressource B et tente de modifier la ressource A. Cette dépendance circulaire provoque un interblocage, car chaque transaction attend que l'autre libère son verrou. Le système termine alors automatiquement la session présentant le coût d'annulation le plus faible (la session victime), ce qui entraîne l'échec de sa tâche. La figure suivante illustre ce scénario.

Types d'interblocage
La page Deadlock affiche les statistiques relatives aux cinq types d'interblocage suivants :
KeyDeadlock
ObjectDeadlock
RIDDeadlock
PageDeadlock
CompileDeadlock
Modes de verrouillage
Lorsqu'une transaction accède à une ressource, elle utilise différents modes de verrouillage (LockMode) selon le type d'accès. Ceux-ci incluent :
Verrou partagé (S) : permet de lire une ressource sans la modifier tant que le verrou est actif.
Verrou de mise à jour (U) : empêche les autres transactions d'acquérir un verrou exclusif sur une ressource, signalant ainsi l'intention de la modifier. Ce verrou est généralement utilisé pour éviter les interblocages susceptibles de se produire lorsque plusieurs sessions tentent de lire, verrouiller, puis mettre à jour une ressource.
Verrou exclusif (X) : empêche les autres transactions d'accéder à la ressource.
Prérequis
Cette fonctionnalité n'est pas disponible pour les instances ApsaraDB RDS for SQL Server 2008 R2 utilisant des disques cloud.
Cette fonctionnalité est disponible uniquement pour les instances ApsaraDB RDS for SQL Server dans les régions suivantes : Chine (Hangzhou), Chine (Shanghai), Chine (Qingdao), Chine (Pékin), Chine (Zhangjiakou), Chine (Hohhot), Chine (Ulanqab), Chine (Shenzhen), Chine (Heyuan), Chine (Guangzhou), Chine (Chengdu), Chine (Hong Kong), Singapour ou Émirats arabes unis (Dubaï).
Détails des interblocages
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside l'instance RDS. Localisez ensuite l'instance RDS et cliquez sur son ID.
Dans le volet de navigation de gauche, choisissez .
Page Deadlock
-
Deadlock count
Cette section affiche le nombre d'interblocages récents et propose des statistiques pour quatre plages temporelles : interblocages au cours des dernières 24 heures, interblocages au cours des 7 derniers jours, interblocages au cours des deux dernières semaines et interblocages au cours du dernier mois.
-
Deadlock trend
Cette section représente graphiquement l'évolution des interblocages sur une plage temporelle donnée. Vous pouvez effectuer les opérations suivantes :
Sélectionnez une Start Date et une End Date, puis cliquez sur Search pour afficher les informations relatives aux interblocages sur la plage temporelle spécifiée. La plage temporelle ne peut pas dépasser 30 jours.
Cliquez sur Previous Day, Last 7 Days ou Last Month pour afficher rapidement les informations relatives aux interblocages sur cette plage temporelle.
Placez le curseur sur un point temporel spécifique pour afficher les types et le nombre d'interblocages survenus à ce moment-là.
Cliquez sur l'icône
située dans le coin supérieur droit du graphique de tendance pour modifier le style d'affichage du graphique ou le télécharger.

-
Deadlock Details
Cliquez sur l'icône
située à côté d'un enregistrement d'interblocage pour afficher les détails des sessions impliquées dans l'interblocage. Les détails incluent :LastTranStarted : heure de début de la transaction.
SPID : ID de la session ayant initié la transaction.
-
IsVictim : indique si la session a été terminée (arrêtée) pour résoudre l'interblocage.
RemarqueSQL Server résout les interblocages à l'aide d'un thread interne qui les détecte périodiquement. Lorsqu'un interblocage est détecté, SQL Server termine la session présentant le coût d'annulation le plus faible parmi les sessions impliquées. Par exemple, comme une instruction
SELECTa généralement un coût inférieur à celui d'une instructionUPDATE, le système privilégie la terminaison de la session exécutant l'instructionSELECT. LogUsed : taille du journal généré par la session. Unité : octets.
LockMode : le mode de verrouillage.
WaitResourceDesc : description de la ressource attendue par la transaction actuelle.
ObjectOwned : objet déjà verrouillé.
ObjectRequested : objet dont la transaction actuelle demande le verrouillage.
WaitResource : ressource attendue par la transaction actuelle.
HostName : nom d'hôte de la transaction actuelle.
LoginName : nom du compte associé à la transaction actuelle.
Status : état de la transaction actuelle.
ClientApp : nom de l'application cliente utilisée par la transaction actuelle.
-
SQLText : détails de l'instruction SQL.
RemarqueCliquez sur Click to Copy pour copier l'instruction SQL et faciliter le dépannage et l'analyse.
Cliquez sur n'importe quelle ligne de la liste des détails pour afficher le diagramme d'interblocage correspondant ci-dessous.
-
Deadlock diagram
Cette section affiche les relations entre les sessions impliquées dans l'interblocage et fournit des détails sur les ressources verrouillées. Vous pouvez cliquer sur le bouton Download pour télécharger un fichier XDL contenant les détails de l'interblocage actuel. Vous pouvez ouvrir et consulter ce fichier avec SQL Server Management Studio (SSMS).

Solutions et optimisation des interblocages
Comment résoudre les interblocages sur une instance ApsaraDB RDS for SQL Server