Behebung von „Lock Wait Timeout Exceeded“-Fehlern in MySQL
Das Auftreten des Fehlers „Wartezeit für Sperre überschritten; versuchen Sie, die Transaktion neu zu starten“ in MySQL, auch ohne explizite Verwendung von Transaktionen, ist ein häufiges Problem mit mehreren möglichen Ursachen.
Ein häufiger Übeltäter ist eine Tabellensperre, die von einem anderen Prozess gehalten wird. Um gesperrte Tabellen zu identifizieren, verwenden Sie diesen Befehl:
<code class="language-sql">SHOW OPEN TABLES WHERE In_use > 0;</code>
Diese Abfrage zeigt derzeit gesperrte Tabellen an. Wenn Ihre Zieltabelle angezeigt wird, besteht der nächste Schritt darin, den verantwortlichen Prozess zu finden, indem Sie Folgendes verwenden:
<code class="language-sql">SHOW PROCESSLIST;</code>
Hier werden aktive Prozesse angezeigt. Suchen Sie die Prozess-ID (PID), die Ihre Tabelle sperrt, und beenden Sie sie mit:
<code class="language-sql">KILL <process_id>;</code>
Ein anderes Szenario betrifft implizite Transaktionen. Suchen Sie nach diesen mit:
<code class="language-sql">SELECT @@INNODB_TRX_ID;</code>
Ein Ergebnis ungleich Null weist auf eine aktive implizite Transaktion hin. Erzwinge ein Commit mit:
<code class="language-sql">COMMIT;</code>
Sollten diese Schritte fehlschlagen, ist möglicherweise ein Neustart des MySQL-Servers oder eine Optimierung der Tabelle erforderlich. Die Tabellenoptimierung kann mit verschiedenen Befehlen erreicht werden, abhängig von Ihrer spezifischen MySQL-Version und Ihren Anforderungen.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich auch ohne Transaktionen die Fehlermeldung „Wartezeit für Sperre überschritten'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!