web-dev-qa-db-fra.com

Impossible de supprimer la table depuis son affichage en attente du verrouillage des métadonnées

Nous essayons de supprimer une table, mais elle se bloque, et lorsque nous voyons la commande "SHOW PROCESSLIST", elle s'affiche comme "en attente du verrouillage des métadonnées". Même nous ne pouvons effectuer aucune opération sur cette table particulière. Quelqu'un sait-il comment le résoudre?

11
ramya

Si une table InnoDB est accessible du tout via SELECT ou DML (INSERT, UPDATE, DELETE), vous devez vous attendre à juste titre à un verrou de métadonnées.

Selon la Documentation MySQL sur le verrouillage MetaData :

Pour garantir la sérialisation des transactions, le serveur ne doit pas autoriser une session à exécuter une instruction DDL (Data Definition Language) sur une table utilisée dans une transaction non terminée dans une autre session. Le serveur y parvient en acquérant des verrous de métadonnées sur les tables utilisées dans une transaction et en différant la libération de ces verrous jusqu'à la fin de la transaction. Un verrou de métadonnées sur une table empêche les modifications de la structure de la table. Cette approche de verrouillage implique qu'une table utilisée par une transaction dans une session ne peut pas être utilisée dans des instructions DDL par d'autres sessions jusqu'à la fin de la transaction.

Cela étant dit, vous devez déterminer si une autre session DB détient ou non des verrous sur la table. Si une telle session est une transaction inachevée, il peut y avoir un blocage.

Si vous avez simplement besoin de l'espace disque rapidement, vous pouvez exécuter TRUNCATE TABLE.

SUGGESTION

Essayez de renommer la table avant de tenter de la supprimer comme suit:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
8
RolandoMySQLDBA

Vous devez trouver quelle requête provoque un verrouillage de transaction en exécutant:

SHOW ENGINE INNODB STATUS

et voyez une section nommée TRANSACTION. Plus tard, vous devez tuer cette requête pour supprimer une base de données.

Référence: Comment savoir quelle transaction provoque un état "En attente de verrouillage des métadonnées de table"?

7