Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann ich „Warten auf Tabellenmetadatensperre' in MySQL identifizieren und beheben?

Patricia Arquette
Freigeben: 2024-10-31 12:54:30
Original
705 Leute haben es durchsucht

How to Identify and Resolve

Fehlerbehebung für den Status „Warten auf Tabellenmetadatensperre“ in MySQL

Das Ausführen von DDL-Vorgängen für eine Tabelle kann gelegentlich zu einem „Warten auf Tabelle“ führen Meldung „Metadatensperre“ beim Überprüfen der SHOW PROCESSLIST. Dies zeigt an, dass eine andere Transaktion noch nicht geschlossen wurde und eine Sperre für die Tabelle hält, wodurch die Änderung verhindert wird.

Identifizieren der blockierenden Transaktion

Um festzustellen, welche Transaktion verursacht wird In diesem Zustand können die folgenden Methoden eingesetzt werden:

1. SHOW ENGINE INNODB STATUS

(Für MySQL-Versionen <5.7.3)

Führen Sie SHOW ENGINE INNODB STATUS G aus, um detaillierte Informationen zu InnoDB-Interna anzuzeigen, einschließlich des Abschnitts TRANSAKTIONEN. Dadurch werden aktive Transaktionen und deren Status aufgelistet.

2. INFORMATION_SCHEMA-Tabellen

Die Tabelle INNODB_LOCK_WAITS im INFORMATION_SCHEMA enthält Informationen zu Transaktionen, die auf Sperren warten. Um alle derartigen Transaktionen zu überprüfen, verwenden Sie:

<code class="sql">SELECT * FROM INNODB_LOCK_WAITS;</code>
Nach dem Login kopieren

Um blockierende Transaktionen zu identifizieren, führen Sie Folgendes aus:

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);</code>
Nach dem Login kopieren

Alternativ:

<code class="sql">SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);</code>
Nach dem Login kopieren

Um Sperren für eine bestimmte zu überprüfen Tabelle:

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;</code>
Nach dem Login kopieren

Um Transaktionen aufzulisten, die auf Sperren warten:

<code class="sql">SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';</code>
Nach dem Login kopieren

Zusätzliche Ressourcen

Siehe MySQL-Fehlerbehebungshandbuch, Kapitel 6 , Seite 96, für weitere Einblicke in die Lösung dieses Problems.

Das obige ist der detaillierte Inhalt vonWie kann ich „Warten auf Tabellenmetadatensperre' in MySQL identifizieren und beheben?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!