Maison > Article > base de données > Comment identifier la transaction coupable à l'origine de « l'attente du verrouillage des métadonnées de table » dans MySQL ?
Enquête sur la source du message "En attente du verrouillage des métadonnées de la table"
Dans MySQL, rencontre d'un message "En attente du verrouillage des métadonnées de la table" pendant DDL les requêtes peuvent être frustrantes. Cet état indique souvent qu'une autre transaction détient un verrou sur la table affectée, empêchant la transaction en cours de se poursuivre.
Identifier la transaction coupable
Pour identifier quelle transaction est responsable de cette retenue, pensez à utiliser les approches suivantes :
1. MySQL v5.5.24 et versions antérieures
Pour les versions MySQL antérieures à 5.7.3, exécutez la commande suivante :
SHOW ENGINE INNODB STATUS \G
Inspectez la section "TRANSACTIONS" pour identifier la transaction incriminée.
2. Tableaux de schéma d'information
Tous les verrous en attente :
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
Transactions bloquantes :
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS);
Verrous sur une table spécifique :
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
Transactions en attente de verrous :
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
Référence supplémentaire :
Pour un guide complet sur la résolution de ce problème, reportez-vous à « Dépannage MySQL : que faire lorsque les requêtes ne fonctionnent pas », chapitre 6, page 96.
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!