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>
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>
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>
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>
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>
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!