Wartezeit für MySQL-Sperre überschritten; Starten Sie die Transaktion erneut

26

Wir führen Java-Anwendung aus, laufen seit Ewigkeiten, Back-End ist db ist MySQL, das kürzlich auf MySQL 5.6 aktualisiert wurde. Alles lief gut, in der vergangenen Woche wurde dieser Fehler angezeigt. Wartezeitüberschreitung für Sperre überschritten. Versuchen Sie, die Transaktion neu zu starten. Es sieht so aus, als würde sie niemals enden. Sie wissen nicht, was Sie mit diesem Fehler tun sollen, um anzuhalten. warum es plötzlich auftritt

JAVAC
quelle

Antworten:

29

Sie können die Variable innodb_lock_wait_timeout = 100 für die Sperrzeit auf 100 Sekunden setzen.

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   |
+--------------------------+-------+

Versuchen Sie, die von einem anderen Prozess gehaltene Tabelle zu sperren. und Ihre Zeitlimitvariable wird mit einer kleinen Anzahl von Sekunden festgelegt. so zeigt es fehler. Sie können mehr Status durch den Befehl sehen.

SHOW ENGINE INNODB STATUS\G 

Sie können die Liste der gesperrten Tabellen anzeigen, indem Sie

 show open tables where in_use>0;

Sehen Sie sich nun den Thread an, der diese Tabelle verwendet

  show full processlist;

Jetzt können Sie diesen Thread beenden oder warten, bis er abgeschlossen ist.

Hitesh Mundra
quelle
Lassen Sie uns diese Diskussion im Chat fortsetzen .
JAVAC
Vielen Dank für diese Information, aber wie kann man zur Wurzel des Problems gelangen, wenn weiterhin Sperren auftreten, selbst bei sehr einfachen Tabellen mit kleinen Aktualisierungen (wie z. B. Inkrementieren oder Aktualisieren eines einzelnen Felds)?
Wouter
-1

Wenn Sie eine MySQL-Version unter 5.0 verwenden, können Sie die Variable auch für die Sitzung oder den globalen Bereich nicht ändern. Die beste Lösung besteht darin, die Abfrage zu erfassen und auszuführen, nachdem der Datenverkehr langsam ist.

Sherry_MySQL
quelle
1
OP sagt, dass sie 5.6 verwenden, was (ich nehme an) 5.0 oder höher ist.
RDFozz