MySQL: Obtenir en permanence "En attente du verrouillage des métadonnées de la table"
Ma base de données MySQL sert trois webapps que le backend de stockage. Cependant j'ai récemment rencontre permanantly l'erreur "d'Attente pour les métadonnées de la table de verrouillage". Il arrive presque tout le temps et je ne comprends pas pourquoi.
mysql> show processlist
-> ;
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+
| 36 | root | localhost:33444 | bookmaker2 | Sleep | 139 | | NULL |
| 37 | root | localhost:33445 | bookmaker2 | Sleep | 139 | | NULL |
| 38 | root | localhost:33446 | bookmaker2 | Sleep | 139 | | NULL |
| 39 | root | localhost:33447 | bookmaker2 | Sleep | 49 | | NULL |
| 40 | root | localhost:33448 | bookmaker2 | Sleep | 139 | | NULL |
| 1315 | bookmaker | localhost:34869 | bookmaker | Sleep | 58 | | NULL |
| 1316 | root | localhost:34874 | bookmaker3 | Sleep | 56 | | NULL |
| 1395 | bookmaker | localhost:34953 | bookmaker | Sleep | 58 | | NULL |
| 1396 | root | localhost:34954 | bookmaker3 | Sleep | 46 | | NULL |
| 1398 | root | localhost:34956 | bookmaker3 | Query | 28 | Waiting for table metadata lock | CREATE TABLE IF NOT EXISTS LogEntries (
lid INT NOT NULL AUTO_INCREMEN |
| 1399 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+
Bien sûr, on peut tuer le processus correspondant. Cependant si j'ai redémarrer mon programme tente de créer la structure de la table de ma base de données "bookmaker3" la nouvellement créé processus se termine à nouveau dans un metalock.
J'ai même impossible de supprimer la base de données:
mysql> drop database bookmaker3;
Cela donne aussi un metalock.
Comment cela peut-il être réparé?
source d'informationauteur toom
Vous devez vous connecter pour publier un commentaire.
Tuer la connexion avec serrure
Ensuite, vérifiez si vous avez autocommit la valeur 0 par
Si oui, vous avez probablement oublié de valider une transaction. Puis une autre connexion voulez faire quelque chose avec ce tableau, ce qui provoque la serrure.
Dans votre cas: Si vous avez fait un peu de requête à LogEntries (qui existe) et n'a pas commis, puis vous essayez d'exécuter CREATE TABLE if not EXISTS à partir d'une autre connexion de métadonnées de verrouillage qui se passe.
modifier
Pour moi le bug est quelque part à votre demande. Vérifiez la présence, ou l'ensemble autocommit à 1 si vous n'êtes pas à l'aide de transactions dans l'application.
ps vérifiez également ce messages:
Les tables INNOdb
Dans le cas où si vous avez HS plugin et en essayant de
CREATE
ouALTER
table qui a déjà tenté d'évaluer via HS vous ferez face à des problèmes similaires et que vous devez redémarrer HS plugin dans cette façon de publier des métadonnées de la table de verrouillage: