Heim  >  Artikel  >  Datenbank  >  Wie identifiziere ich Transaktionen, die in MySQL zum „Warten auf Tabellenmetadatensperre“ führen?

Wie identifiziere ich Transaktionen, die in MySQL zum „Warten auf Tabellenmetadatensperre“ führen?

DDD
DDDOriginal
2024-10-31 01:19:29644Durchsuche

How to Identify Transactions Causing

Identifizieren von Transaktionen, die den Status „Warten auf Tabellenmetadatensperre“ verursachen

Beim Versuch, DDL-Vorgänge für eine Tabelle auszuführen, kann es vorkommen, dass Meldung „Warten auf Tabellenmetadatensperre“ in SHOW PROCESSLIST. Dies weist darauf hin, dass eine andere Transaktion immer noch auf die Tabelle verweist und verhindert, dass ihre Metadaten geändert werden.

Identifizieren der Transaktion

MySQL-Versionen vor 5.7.3:

  • Führen Sie den Befehl aus: SHOW ENGINE INNODB STATUS G
  • Suchen Sie den Abschnitt „TRANSAKTIONEN“.

Für MySQL-Versionen 5.7 .3 und höher:

  • Verwenden Sie INFORMATION_SCHEMA-Tabellen:

Um alle wartenden Sperrtransaktionen zu identifizieren:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

Um blockierende Transaktionen zu identifizieren:

SELECT * 
FROM INNODB_LOCKS 
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);

Um Sperren für eine bestimmte Tabelle zu identifizieren:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

Zur Identifizierung Transaktionen, die auf Sperren warten:

SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';

Beispielausgabe:

Die INNODB_LOCK_WAITS-Abfrage könnte eine Ausgabe ähnlich der folgenden liefern:

...
REQUESTING TRXs:
trx id 10,mysql thread id 1161142,query SELECT ...
trx id 16,mysql thread id 1161141,query SELECT ...
...

Dies zeigt an, dass die Transaktions-IDs 10 und 16 auf die Sperre warten. Eine weitere Analyse kann mithilfe der anderen bereitgestellten Abfragen durchgeführt werden, um die blockierende Transaktion und die spezifische Tabelle, die gesperrt wird, zu identifizieren.

Das obige ist der detaillierte Inhalt vonWie identifiziere ich Transaktionen, die in MySQL zum „Warten auf Tabellenmetadatensperre“ führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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