À partir d'un script, j'ai envoyé une requête comme celle-ci des milliers de fois à ma base de données locale :
update some_table set some_column = some_value
J'ai oublié d'ajouter la clause where, donc la même colonne a été définie avec la même valeur pour toutes les lignes de la table et cela a été fait des milliers de fois et la colonne était indexée, donc l'index correspondant a probablement été mis à jour de nombreuses fois également.
J'ai remarqué quelque chose d'anormal car cela prenait trop de temps, j'ai donc interrompu le script. J'ai même redémarré mon ordinateur depuis, mais quelque chose est resté bloqué dans la table, car les requêtes simples prennent beaucoup de temps à s'exécuter et lorsque j'essaie de supprimer l'index pertinent, cela échoue avec ce message :
Lock wait timeout exceeded; try restarting transaction
Il s'agit d'une table innodb, donc le blocage de la transaction est probablement implicite. Comment puis-je corriger cette table et supprimer la transaction bloquée ?
3 votes
Quel est le résultat de
SHOW FULL PROCESSLIST
?0 votes
Il affiche uniquement la commande SHOW FULL PROCESSLIST, rien d'autre. C'est une base de données de développement locale. Rien ne s'y exécute. J'ai reçu le message d'erreur 'lock wait..' sur la ligne de commande lorsque j'ai essayé de supprimer l'index à partir de là.
0 votes
Dans ce cas, vous créez probablement 2 connexions séparées dans des transactions différentes qui doivent attendre l'une l'autre.
0 votes
Je n'ai créé aucune transaction par la suite. J'ai arrêté le script, redémarré la machine et me suis connecté en ligne de commande pour jeter un œil autour. Rien d'autre n'a utilisé la base de données à part le client de ligne de commande mysql, donc quelque chose devait être bloqué dans la table.
0 votes
Merci pour ça - ça m'a juste évité beaucoup de maux de tête de ne pas me tirer les cheveux et de réinstaller le serveur. Je pensais que quelque chose n'allait vraiment pas :)
1 votes
Question connexe: Comment déboguer le dépassement du délai d'attente de verrouillage?
0 votes
J'ai le même problème, sauf que toutes mes données sont sauvegardées dans des fichiers XML. Aucune de ces solutions ne fonctionne pour moi (elles ont tendance à supposer un système en cours d'exécution, pas un qui a redémarré), donc je suppose que je devrai attendre la restauration de millions d'enregistrements via
load xml local infile
. [soupir]0 votes
Amusant comment vos questions ont 45 votes positifs, mais votre réponse a -48 votes négatifs :)
0 votes
Excellente réponse à une question similaire, répertoriée sur dba.stackexchange.com/questions/100984/…