Wartezeit für Sperren überschritten; Versuchen Sie, die Transaktion neu zu starten

12

Ich bekomme diesen Fehler 4 - 5 Mal täglich wiederholt.

SQLSTATE [HY000]: Allgemeiner Fehler: 1205 Wartezeit für Sperren überschritten; Versuchen Sie, die Transaktion neu zu starten

Dieses Mal starte ich mein phpmyadmin neu, aber es passiert immer wieder. Ich kann auf dieses Problem nicht hinweisen.

Ich benutze Magento ver. 1.9.0.1 in der Website. Ich habe mehr als 7000 Produkte. Im Server habe ich 16GB RAM.

Wie kann ich dieses Problem beheben?

Magento 2
quelle

Antworten:

8

Sie sollten den Wert für das Wartezeitlimit für die Sperre für InnoDB erhöhen , indem Sie das Zeitlimit für innodb_lock_wait_timeout festlegen . Der Standardwert beträgt 50 Sekunden

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

/etc/my.cnfMit dieser Zeile können Sie dauerhaft einen höheren Wert einstellen

[mysqld]
innodb_lock_wait_timeout=120

und starte mysql neu. Wenn Sie MySQL derzeit nicht neu starten können, führen Sie Folgendes aus:

SET GLOBAL innodb_lock_wait_timeout = 120; 

Sie können es auch einfach für die Dauer Ihrer Sitzung einstellen

SET innodb_lock_wait_timeout = 120; 

gefolgt von Ihrer Anfrage

Arunendra
quelle
3
warum nicht 140 'oder 2000'? Wie könnte dies das Problem tatsächlich lösen? indem du es versteckst?
Elzo Valugi
Sie haben ein Problem, das dazu führt, dass Tabellen mehr als erwartet gesperrt werden. Wenn Sie dies tun, müssen Sie jedes Mal 2 Minuten warten, anstatt das Problem einmal zu beheben. Und wie Elzo sagt ... was passiert, wenn 120 nicht genug ist?
Carlos Robles
7

Diese Meldung wird angezeigt, wenn der Datenbankinhalt, auf den Sie zugreifen möchten, durch einen (normalerweise lang laufenden) vorherigen Prozess gesperrt wurde. MySQL wartet eine gewisse Zeit, bis die Sperre entfernt ist, bevor es aufgibt und diesen Fehler auslöst. Wenn Sie nachverfolgen können, wann diese Fehlermeldungen zu einer konsistenten Tageszeit angezeigt werden, sollten Sie sich ansehen, was der Server zu diesem Zeitpunkt noch tut - beispielsweise wird eine Datenbanksicherung ausgeführt. Auf diese Weise sollten Sie in der Lage sein, die Möglichkeiten einzugrenzen, durch welche Prozesse die Sperre erstellt werden kann, obwohl dies nicht immer so einfach ist - wahrscheinlich ein bisschen Versuch und Irrtum.

Jonathan Hussey
quelle
5

Der Grund für dieses Problem ist, dass Sie viele benutzerdefinierte Skripts ausführen und die Skripte beenden, bevor die Datenbankverbindung geschlossen werden kann.

Etwas blockiert die Ausführung der Abfrage. Höchstwahrscheinlich wird eine andere Abfrage aktualisiert, eingefügt oder aus einer der Tabellen in Ihrer Abfrage gelöscht. Sie müssen herausfinden, was das ist:

Wenn Sie sich über die CLI bei MySQL anmelden und den folgenden Befehl ausführen können

SHOW PROCESSLIST;

Sobald Sie den Blockierungs- / Schlafprozess gefunden haben, suchen Sie ihn idund führen Sie Folgendes aus:

KILL {id};

Führen Sie Ihre erste Abfrage erneut aus.

Möglicherweise hilft Ihnen dieser Link: SQLSTATE [HY000]: Allgemeiner Fehler: 1205 Wartezeit für Sperren überschritten; Versuchen Sie, die Transaktion Magento neu zu starten .

Rohit Kundale
quelle
2

Erhöhen Sie die Ausführungszeit in Ihrer php.ini auf dem Server oder fragen Sie den Hosting-Anbieter.

Surya Prakash Patel
quelle