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

11

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?

ramya
la source

Réponses:

8

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 qui est utilisée par une transaction dans une session ne peut pas être utilisée dans les 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, c'est là que le blocage peut se produire.

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

SUGGESTION

Essayez de renommer la table avant d'essayer de la supprimer comme suit:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;
RolandoMySQLDBA
la source
La suggestion n'a pas fonctionné pour nous. Au lieu de cela, nous obtenons "En attente du verrouillage des métadonnées de la table" sur ALTER TABLE foorenamefootodrop
Motin
@Motin, cela signifie simplement qu'une ou plusieurs connexions DB accédaient toujours à la table foo. Une fois que toutes ces connexions ont été établies, le ALTER TABLEpeut continuer.
RolandoMySQLDBA