web-dev-qa-db-fra.com

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

nous exécutons Java, en cours d'exécution 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 Délai d'attente de verrouillage dépassé; essayez de redémarrer une transaction qui semble ne jamais s'arrêter de se terminer ne sait pas quoi faire avec cette erreur pour s'arrêter. pourquoi elle se produit tout d'un coup

28
JAVAC

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.

32
Hitesh Mundra