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


12

J'obtiens cette erreur plusieurs fois par jour 4 à 5 fois.

SQLSTATE [HY000]: Erreur générale: 1205 Délai d'attente de verrouillage dépassé; essayez de redémarrer la transaction

Cette fois, je redémarre mon phpmyadmin mais ça arrive encore et encore. Je ne suis pas en mesure de signaler ce problème.

J'utilise Magento ver. 1.9.0.1 dans le site Web. J'ai plus de 7000 produits. Dans le serveur, j'ai 16 Go de RAM.

Comment résoudre ce problème?

Réponses:


8

Vous devriez envisager d'augmenter la valeur du délai d'attente de verrouillage pour InnoDB en définissant la valeur innodb_lock_wait_timeout , la valeur par défaut est 50 s

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

Vous pouvez le régler sur une valeur plus élevée en /etc/my.cnfpermanence avec cette ligne

[mysqld]
innodb_lock_wait_timeout=120

et redémarrez mysql. Si vous ne pouvez pas redémarrer mysql à ce stade, exécutez ceci:

SET GLOBAL innodb_lock_wait_timeout = 120; 

Vous pouvez également le régler pour la durée de votre session

SET innodb_lock_wait_timeout = 120; 

suivi de votre requête


3
pourquoi pas 140 'ou 2000'? comment cela pourrait-il réellement résoudre le problème? en le cachant?
Elzo Valugi

vous rencontrez un problème qui provoque le verrouillage des tables plus que prévu. Si vous faites cela, vous vous forcez à attendre 2 minutes à chaque fois au lieu de résoudre le problème une fois. Et comme Elzo le dit ... que se passe-t-il lorsque 120 n'est pas suffisant?
Carlos Robles

7

Vous verrez ce message si le contenu de la base de données auquel vous essayez d'accéder a été verrouillé par un processus précédent (généralement long). MySQL attendra un certain temps pour que le verrou soit retiré avant d'abandonner et de lancer cette erreur. Si vous pouvez suivre le moment où vous voyez ces messages d'erreur à n'importe quelle heure de la journée, vous devriez regarder ce que le serveur fait d'autre à ce moment-là, par exemple, une sauvegarde de base de données est en cours d'exécution. En faisant cela, vous devriez être en mesure de restreindre les possibilités de quels processus pourraient créer le verrou, bien que ce ne soit pas toujours aussi simple à faire - ce sera probablement un peu d'essais et d'erreurs.


5

La raison de ce problème est que vous exécutez un grand nombre de scripts personnalisés et que vous tuez les scripts avant que la connexion à la base de données ne se ferme.

Quelque chose bloque l'exécution de la requête. Une autre requête est probablement mise à jour, insérée ou supprimée d'une des tables de votre requête. Vous devez découvrir ce que c'est:

Si vous pouvez vous connecter à MySQL depuis CLI et exécuter la commande suivante

SHOW PROCESSLIST;

Une fois que vous avez localisé le processus de blocage / veille, trouvez-le idet exécutez:

KILL {id};

Relancez votre requête initiale.

Ce lien peut vous aider: SQLSTATE [HY000]: Erreur générale: 1205 Délai d'attente de verrouillage dépassé; essayez de redémarrer la transaction Magento .


2

augmentez le temps d'exécution en vous php.ini sur le serveur OU demandez au fournisseur d'hébergement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.