dépassement du délai d'attente de verrouillage mysql; essayez de redémarrer la transaction

26

nous exécutons une application java, fonctionnant depuis des lustres, le back-end est db est MySQL, récemment mis à jour vers mysql 5.6. Tout fonctionnait bien, la semaine dernière a commencé à obtenir cette erreur Le délai d'attente de verrouillage a été dépassé; essayez de redémarrer la transaction qui semble ne jamais s'arrêter de terminer ne sais pas quoi faire avec cette erreur pour arrêter. pourquoi cela se produit tout d'un coup

JAVAC
la source

Réponses:

29

Vous pouvez définir la variable innodb_lock_wait_timeout = 100 pour le temps de verrouillage sur 100 s.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

La transaction qui est timeout, essayez de verrouiller la table qui est détenue par un autre processus. et votre variable de délai d'attente définie avec un petit nombre de secondes. il montre donc une erreur. Vous pouvez voir plus d'état par la commande.

SHOW ENGINE INNODB STATUS\G 

Vous pouvez voir la liste des tables verrouillées par-

 show open tables where in_use>0;

Maintenant, voyez le fil qui utilise ce tableau

  show full processlist;

vous pouvez maintenant tuer ce fil ou attendre de le terminer.

Hitesh Mundra
la source
Continuons cette discussion dans le chat .
JAVAC
Merci pour ces informations, mais comment aller à la racine du problème lorsque les verrous continuent de se produire, même sur des tables très simples avec de petites mises à jour (comme incrémenter ou mettre à jour un seul champ).
Wouter
-1

Si vous utilisez une version MySQL inférieure à 5.0, vous ne pouvez pas modifier la variable même pour la session ou la portée globale. La meilleure solution consiste à capturer la requête et à l'exécuter une fois le trafic lent.

Sherry_MySQL
la source
2
OP dit qu'ils utilisent 5.6, qui (je suppose) est 5.0 ou supérieur.
RDFozz du