Untersuchung der Ursache von „Warten auf Tabellenmetadatensperre“
In MySQL wird während der DDL die Meldung „Warten auf Tabellenmetadatensperre“ angezeigt Anfragen können frustrierend sein. Dieser Status weist oft darauf hin, dass eine andere Transaktion eine Sperre für die betroffene Tabelle hält und verhindert, dass die aktuelle Transaktion fortgesetzt wird.
Identifizierung der verantwortlichen Transaktion
Um festzustellen, um welche Transaktion es sich handelt Wenn Sie für diesen Halt verantwortlich sind, sollten Sie die folgenden Ansätze in Betracht ziehen:
1. MySQL v5.5.24 und niedriger
Führen Sie für MySQL-Versionen vor 5.7.3 den folgenden Befehl aus:
SHOW ENGINE INNODB STATUS \G
Überprüfen Sie den Abschnitt „TRANSAKTIONEN“, um die fehlerhafte Transaktion zu identifizieren.
2. Informationsschematabellen
Alle wartenden Sperren:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
Blockierende Transaktionen:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS);
Sperren für eine bestimmte Tabelle:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
Transaktionen, die auf Sperren warten:
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
Zusätzliche Referenz:
Eine umfassende Anleitung zur Fehlerbehebung dieses Problems finden Sie unter „MySQL-Fehlerbehebung: Was zu tun ist, wenn Abfragen nicht funktionieren“, Kapitel 6, Seite 96.
Das obige ist der detaillierte Inhalt vonWie identifiziere ich die verantwortliche Transaktion, die „Warten auf Tabellenmetadatensperre' in MySQL verursacht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!