DAS propose deux modes d'analyse des interblocages pour vos bases de données : l'analyse des interblocages récents, qui examine le dernier journal d'interblocage, et l'analyse complète des interblocages, qui analyse les journaux d'erreurs toutes les heures pour suivre les tendances des interblocages.
Les données illustrées dans les figures, y compris les identifiants de thread et les instructions SQL, sont fournies à titre d'exemple. Utilisez vos propres données et paramètres lors de l'exécution des opérations.
Prérequis
-
L'instance cible doit utiliser l'un des moteurs suivants :
-
Analyse des interblocages récents :
RDS MySQL
MySQL géré par l'utilisateur
PolarDB for MySQL
PolarDB-X 2,0
-
Analyse complète des interblocages :
RDS MySQL
PolarDB for MySQL
-
L'instance cible doit être connectée à DAS avec un statut de connexion défini sur Normal Access. Pour plus d'informations, consultez la rubrique Connecter une instance de base de données à DAS.
-
Le service Alibaba Cloud Managed Services (anciennement DAS Economy Edition) doit être activé.
ImportantAlibaba Cloud Managed Services est disponible uniquement dans certaines régions. Pour plus d'informations, consultez la rubrique Bases de données et régions prises en charge par édition.
Pour activer ce service, consultez la rubrique Gérer Alibaba Cloud Managed Services.
Analyse des interblocages récents
-
Configuration des paramètres : le paramètre
innodb_deadlock_detectdoit être activé sur l'instance.RemarqueCe paramètre est activé par défaut. Pour le vérifier, exécutez la commande
SHOW VARIABLES LIKE 'innodb_deadlock_detect'. Ce paramètre ne peut pas être modifié pour certains types d'instances.-
Pour modifier les paramètres de l'instance :
Pour RDS MySQL, consultez la rubrique Définir les paramètres de l'instance.
Pour PolarDB for MySQL, consultez la rubrique Définir les paramètres du cluster et des nœuds.
-
Analyse des données : analyse le journal d'interblocage le plus récent renvoyé par la commande
SHOW ENGINE INNODB STATUS.
Si plusieurs interblocages se produisent, seul le plus récent est capturé et enregistré lors de chaque analyse.
Procédure
Connectez-vous à la console DAS.
Dans le volet de navigation de gauche, cliquez sur .
Recherchez l'instance cible et cliquez sur son ID pour ouvrir la page des détails de l'instance.
Dans le volet de navigation de gauche, cliquez sur Lock Analysis. Sur la page Lock Analysis, sélectionnez l'onglet Recent Deadlock Analysis.
-
Cliquez sur Create Analysis pour lancer une analyse des interblocages récents.
Une fois l'analyse terminée, le tableau des résultats de l'onglet Recent Deadlock Analysis affiche l'heure de génération, l'heure d'occurrence et indique si un interblocage a été détecté. Cliquez sur View Details pour consulter les informations détaillées sur l'interblocage.
Afficher les détails
Sélectionnez une période pour afficher les résultats des tâches d'analyse déclenchées durant cet intervalle.
Dans la liste des tâches d'analyse des interblocages récents, cliquez sur View Details dans la colonne Details.
-
Un panneau s'affiche avec les détails de l'interblocage répartis dans trois onglets :
View : affiche un graphique visuel des relations d'interblocage, incluant les nœuds de transaction et les verrous d'enregistrement. Les flèches étiquetées lock granted et waiting illustrent les relations de possession et d'attente des verrous, formant un cycle d'interblocage. Les transactions annulées sont marquées comme « Rolled back ». Cliquez sur un nœud de transaction pour développer ses détails, tels que l'ID de session, l'ID de thread, le type de requête, l'ID de transaction, la table concernée, les informations sur le verrou en attente et le nom de l'index associé au verrou en attente.
List : présente une comparaison côte à côte des deux transactions impliquées dans l'interblocage, avec indication des transactions annulées. Les lignes du tableau incluent l'ID de session, l'ID de thread, le type de requête, l'ID de transaction, la table concernée, le verrou en attente (nom de l'index et type de verrou, par exemple X locks rec but not gap waiting), le verrou détenu (nom de l'index et type de verrou) et l'instruction SQL de la transaction. Vous pouvez utiliser l'ID de thread ou l'ID de transaction en bas de page pour rechercher les détails associés à la transaction dans SQL Explorer and Audit.
Log : affiche le journal brut de l'interblocage issu de la section
LATEST DETECTED DEADLOCKde la sortie de la commandeSHOW ENGINE INNODB STATUS, y compris l'heure de l'interblocage, les instructions SQL des transactions concernées, les informations sur le verrou détenu (HOLDS THE LOCK) et les informations sur le verrou en attente (WAITING FOR THIS LOCK TO BE GRANTED).
Analyser avec SQL Explorer and Audit
Dans le volet de navigation de gauche de l'instance cible, cliquez sur SQL Explorer and Audit. Sur la page Audit, cliquez sur Enable Advanced Query.
-
Sélectionnez une plage horaire couvrant le moment où l'interblocage s'est produit et saisissez l'ID de thread issu de l'analyse des interblocages récents pour interroger les instructions SQL exécutées par cette transaction.
Pour la transaction 1 de l'exemple, les résultats de la requête montrent que le thread a exécuté trois instructions SQL :
update students set name=UUID() where id = 2(temps d'exécution : 2 938,377 ms, temps d'attente du verrou : 1 ms),update students set name=UUID() where id = 3(temps d'exécution : 0,002 ms) etbegin. La durée d'exécution anormalement longue de la première instruction UPDATE indique une attente de verrou.Pour la transaction 2 (annulée) : sur la page Audit, définissez la Time range, saisissez
195662dans le champ Thread ID, puis cliquez sur Query. La liste des journaux affiche l'historique d'exécution SQL de la transaction 2 : l'instructionupdate students set name=UUID() where id = 3a échoué avec le code d'erreur 1213 (interblocage) et a duré 1,40 ms, avec un temps d'attente du verrou de 1,152 ms. L'instructionupdate students set name=UUID() where id = 2a réussi et a duré 0,20 ms. L'instructionbegina réussi et a duré 0,18 ms.
Analyse complète des interblocages
-
Activez les paramètres
innodb_deadlock_detectetinnodb_print_all_deadlocks. Pour une instance RDS MySQL, définissez le paramètrelog_error_verbositysur 3.RemarqueLe paramètre
innodb_deadlock_detectest activé par défaut. Vous pouvez exécuter la commandeSHOW VARIABLES LIKE 'innodb_deadlock_detect'pour le vérifier. Ce paramètre ne peut pas être modifié pour certains types d'instances.-
Pour modifier les paramètres de l'instance :
Pour RDS MySQL, consultez la rubrique Définir les paramètres de l'instance.
Pour PolarDB for MySQL, consultez la rubrique Définir les paramètres du cluster et des nœuds.
-
Source de données : DAS analyse les informations d'interblocage issues du journal d'erreurs de l'instance toutes les heures afin de générer des tendances sur le nombre d'interblocages et de compiler les détails de chaque interblocage.
-
Période de latence : si Alibaba Cloud Managed Services est activé et que DAS détecte que les paramètres requis ne sont pas activés, DAS entre dans une période de latence de 12 heures et n'exécute pas les tâches d'analyse. Si vous activez les paramètres requis durant cette période, DAS attend la fin de la période de latence avant de replanifier l'analyse. Exemple :
Une tâche d'analyse à 11 h 12 détecte qu'un paramètre requis n'est pas activé et initie une période de latence de 12 heures. Après 23 h 12, l'analyse complète des interblocages replanifie la tâche. Si le paramètre n'est toujours pas activé, une nouvelle période de latence de 12 heures commence. Si vous activez le paramètre avant 23 h 12, la période de latence prend fin à 23 h 12. Par la suite, l'analyse s'exécute toutes les heures, à condition que le paramètre requis et Alibaba Cloud Managed Services restent activés pour l'instance.
L'analyse des interblocages contenant le message « TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION » n'est pas prise en charge.
Procédure
Connectez-vous à la console DAS.
Dans le volet de navigation de gauche, cliquez sur .
Recherchez l'instance cible et cliquez sur son ID pour ouvrir la page des détails de l'instance.
Dans le volet de navigation de gauche, cliquez sur Lock Analysis. Sur la page Lock Analysis, sélectionnez l'onglet Full Deadlock Analysis.
-
Toutes les heures, l'analyse complète des interblocages analyse automatiquement les journaux d'erreurs de l'instance, compte les interblocages et trace les données sur le graphique Deadlock Trend en haut de la page. Sélectionnez une période pour afficher la tendance des interblocages correspondante.
Le haut de la page propose des boutons de sélection rapide pour Last 1 Day, Last 3 Days et Last 7 Days, ainsi qu'un sélecteur de plage de dates personnalisée. Cliquez sur le bouton View pour actualiser le graphique de tendance. Sous le graphique se trouve une liste des événements d'interblocage affichant l'Deadlock Time pour chacun d'eux. Cliquez sur View Details pour un événement spécifique afin d'afficher plus d'informations.
Afficher les détails
Dans la liste des interblocages de l'analyse complète, cliquez sur View Details dans la colonne Details.
Un panneau s'affiche avec les détails de l'interblocage répartis dans trois onglets : View, List et Log. L'onglet Log contient le contenu du journal d'erreurs lié à l'interblocage. Les onglets View et List sont identiques à ceux de l'analyse des interblocages récents. Pour plus d'informations, consultez la rubrique Analyse des interblocages récents - Afficher les détails.
Analyser avec SQL Explorer and Audit
La procédure est identique à celle de l'analyse des interblocages récents. Pour plus d'informations, consultez la rubrique Analyse des interblocages récents - Analyser avec SQL Explorer and Audit.