Maison > base de données > tutoriel mysql > le corps du texte

Comment identifier et résoudre « En attente du verrouillage des métadonnées de table » dans MySQL ?

Patricia Arquette
Libérer: 2024-10-31 12:54:30
original
774 Les gens l'ont consulté

How to Identify and Resolve

Dépannage de l'état "En attente du verrouillage des métadonnées de la table" dans MySQL

L'exécution d'opérations DDL sur une table peut parfois entraîner un message "En attente de la table message de verrouillage des métadonnées" lors de la vérification de SHOW PROCESSLIST. Cela indique qu'une autre transaction n'a pas encore été clôturée et détient un verrou sur la table, empêchant la modification.

Identifier la transaction bloquante

Pour déterminer quelle transaction est à l'origine cet état, les méthodes suivantes peuvent être employées :

1. SHOW ENGINE INNODB STATUS

(Pour les versions MySQL <5.7.3)

Exécutez SHOW ENGINE INNODB STATUS G pour afficher des informations détaillées sur les composants internes d'InnoDB, y compris la section TRANSACTIONS. Cela listera les transactions actives et leur statut.

2. Tables INFORMATION_SCHEMA

La table INNODB_LOCK_WAITS dans INFORMATION_SCHEMA contient des informations sur les transactions en attente de verrous. Pour vérifier toutes ces transactions, utilisez :

<code class="sql">SELECT * FROM INNODB_LOCK_WAITS;</code>
Copier après la connexion

Pour identifier les transactions bloquantes, exécutez :

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);</code>
Copier après la connexion

Alternativement :

<code class="sql">SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);</code>
Copier après la connexion

Pour vérifier les verrous sur un spécifique table :

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;</code>
Copier après la connexion

Pour lister les transactions en attente locks :

<code class="sql">SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';</code>
Copier après la connexion

Ressources supplémentaires

Reportez-vous au Guide de dépannage MySQL, chapitre 6, page 96, pour plus d'informations sur la résolution de ce problème.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal