Heim > Datenbank > MySQL-Tutorial > Wie behebe ich den MySQL-Fehler „Wartezeit für Sperre überschritten'?

Wie behebe ich den MySQL-Fehler „Wartezeit für Sperre überschritten'?

Linda Hamilton
Freigeben: 2024-12-09 13:03:10
Original
420 Leute haben es durchsucht

How to Resolve MySQL's

Wie debugge ich „Wartezeitüberschreitung für Sperre“ in MySQL?

Wenn in MySQL-Protokollen der Fehler „Wartezeitüberschreitung für Sperre überschritten“ auftritt, deutet dies auf eine wartende Transaktion hin für eine Sperre für ein Datenbankelement. Während Sie vielleicht wissen, welche Abfrage versucht, auf die Datenbank zuzugreifen, kann es schwierig sein, herauszufinden, welche Abfrage genau in diesem Moment die Sperre hält.

Identifizierung des Täters

Das Vorhandensein des Wortes „Transaktion“ in der Fehlermeldung deutet darauf hin, dass die problematische Abfrage die Änderung mindestens einer Zeile in einer oder mehreren InnoDB-Tabellen beinhaltet. Da Sie Zugriff auf die Abfrage haben, die die Fehler verursacht, können Sie feststellen, auf welche Tabellen zugegriffen wird, da sie potenzielle Schuldige sind.

Verwenden Sie SHOW ENGINE INNODB STATUSG

Führen Sie zur weiteren Untersuchung Folgendes aus Befehl:

SHOW ENGINE INNODB STATUS\G
Nach dem Login kopieren

Dies liefert Informationen zu Sperren und Mutexes, einschließlich:

  • Betroffene Tabellen
  • RW-gemeinsame Lock-Spins
  • RW-exklusive Lock-Spins
  • Mutex-Spin-Wartezeiten
  • Informationen zur Zeilensperre
  • Protokoll rückgängig machen Einträge

Beispielausgabe

Die folgende Ausgabe eines Clients veranschaulicht beispielsweise das Problem.

Type: InnoDB
Name:
Status:

=====================================
110514 19:44:14 INNODB MONITOR OUTPUT
=====================================

Per second averages calculated from the last 4 seconds
----------
SEMAPHORES
----------

Mutex spin waits 0, rounds 11487096053, OS waits 7756855

RW-shared spins 722142, OS waits 211221; RW-excl spins 787046, OS waits 39353

------------------------
LATEST FOREIGN KEY ERROR
------------------------

110507 21:41:35 Transaction:
TRANSACTION 0 606162814, ACTIVE 0 sec, process no 29956, OS thread id 1223895360 updating or deleting, thread declared inside InnoDB 499
mysql tables in use 1, locked 1

14 lock struct(s), heap size 3024, 8 row lock(s), undo log entries 1

MySQL thread id 3686635, query id 124164167 10.64.89.145 viget updating
DELETE FROM file WHERE file_id in ('6dbafa39-7f00-0001-51f2-412a450be5cc' )

...
Nach dem Login kopieren

In dieser Ausgabe erscheint die Tabelle „Datei“. um die betroffene Tabelle zu sein, da die DELETE-Abfrage versucht, Zeilen in dieser Tabelle zu ändern. Durch die Analyse der Ausgabe können Sie die spezifische Tabelle lokalisieren, die den Sperrkonflikt verursacht.

Erhöhen des Sperrwartezeitlimits

Um das Auftreten dieser Fehler in Zukunft zu vermeiden, sollten Sie das Sperrwartezeitlimit erhöhen Wert für InnoDB durch Festlegen des Parameters innodb_lock_wait_timeout. Der Standardwert beträgt 50 Sekunden.

Um das Timeout dauerhaft zu erhöhen, fügen Sie die folgende Zeile zu Ihrer /etc/my.cnf-Datei hinzu:

[mysqld]
innodb_lock_wait_timeout=120
Nach dem Login kopieren

Alternativ können Sie das Timeout vorübergehend anpassen innerhalb der aktuellen Sitzung:

SET innodb_lock_wait_timeout = 120;
Nach dem Login kopieren

Eine Erhöhung des Timeouts gibt der wartenden Transaktion mehr Zeit, die Sperre zu erhalten, wodurch die Wahrscheinlichkeit eines Timeouts verringert wird Fehler.

Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „Wartezeit für Sperre überschritten'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage