Heim > Datenbank > MySQL-Tutorial > Wie identifiziere ich die spezifische Abfrage, die den Fehler „Wartezeit für Sperre überschritten' in MySQL verursacht?

Wie identifiziere ich die spezifische Abfrage, die den Fehler „Wartezeit für Sperre überschritten' in MySQL verursacht?

Susan Sarandon
Freigeben: 2024-12-31 06:10:09
Original
686 Leute haben es durchsucht

How to Identify the Specific Query Causing a

So identifizieren Sie die spezifische Abfrage, die die Sperre gehalten hat, wenn in MySQL ein Fehler auftritt, der das Sperrwartezeitlimit überschritten hat

Einführung:

Der Fehler „Wartezeit für Sperre überschritten“ in MySQL weist darauf hin, dass eine Abfrage beim Versuch, auf eine gesperrte Ressource zuzugreifen, auf eine Zeitüberschreitung beim Warten auf Sperre gestoßen ist. Dies kann in Szenarien auftreten, in denen mehrere Abfragen auf dieselben Daten zugreifen und eine Abfrage aufgrund einer widersprüchlichen Sperre die Ausführung einer anderen blockiert. Das Bestimmen der spezifischen Abfrage, die das Warten auf die Sperre verursacht, kann dabei helfen, das Problem zu lösen und zukünftige Vorkommnisse zu verhindern.

Identifizieren der verantwortlichen Abfrage:

Im Fehlerprotokoll steht das Wort „ „Transaktion“ ist ein Schlüsselindikator dafür, dass die Abfrage, die versucht, auf die Datenbank zuzugreifen, eine oder mehrere InnoDB-Tabellen ändert. Wenn man die Abfrage kennt, die den Fehler ausgelöst hat, ist es möglich, die betroffenen Tabellen zu identifizieren.

Mit dem Befehl SHOW ENGINE INNODB STATUSG können Sie Informationen über die betroffenen Tabellen und den Sperrstatus erhalten. Dieser Befehl zeigt detaillierte Informationen an, einschließlich:

  • RW-shared spins: Gibt die Anzahl der Spins an, die auf eine gemeinsame Lesesperre warten.
  • RW -excl spins:Gibt die Anzahl der Spins an, die auf eine exklusive Sperre warten.
  • Mutex Spin-Wartezeiten: Anzahl der Spins, die auf Mutexe warten.

Beispielausgabe:

Die folgende Ausgabe von SHOW ENGINE INNODB STATUSG zeigt, dass eine bestimmte Abfrage vorliegt wartet auf eine exklusive Sperre für den Anhang Tabelle:

RW-excl spins: 787046, OS waits: 39353
...
Latest foreign key error (a full list is printed in the InnoDB error log when a foreign key error occurs):
...
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
...
Foreign key constraint fails for table `backoffice`.`attachment`:

,
  CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`file_id`) REFERENCES `file` (`file_id`)
Trying to delete or update in parent table, in index `PRIMARY` tuple:
...
But in child table `backoffice`.`attachment`, in index `PRIMARY`, there is a record:
Nach dem Login kopieren

Lösung:

Um das Problem zu beheben, können Sie den Wert des Parameters innodb_lock_wait_timeout erhöhen, der die maximale Zeit angibt, die eine Transaktion warten soll eine Sperre, bevor ein Fehler gemeldet wird. Durch Erhöhen dieses Timeouts können Sie mehr Pufferzeit für den Abschluss von Transaktionen bereitstellen und die Wahrscheinlichkeit von Sperr-Timeout-Fehlern verringern.

innodb_lock_wait_timeout festlegen:

  • Um das Timeout dauerhaft festzulegen, fügen Sie die folgende Zeile zu /etc/my.cnf hinzu und starten Sie neu MySQL:

    [mysqld]
    innodb_lock_wait_timeout=120
    Nach dem Login kopieren
  • Um das Timeout für die aktuelle Sitzung festzulegen, führen Sie die folgende Abfrage aus:

    SET GLOBAL innodb_lock_wait_timeout = 120;
    Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie identifiziere ich die spezifische Abfrage, die den Fehler „Wartezeit für Sperre überschritten' in MySQL verursacht?. 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