Antworten:
SHOW ENGINE INNODB STATUS \G
Suchen Sie nach dem Abschnitt -
TRANSACTIONS
Wir können INFORMATION_SCHEMA- Tabellen verwenden.
Nützliche Abfragen
So überprüfen Sie alle Sperren, auf die Transaktionen warten:
USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;
Eine Liste blockierender Transaktionen:
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
ODER
SELECT INNODB_LOCKS.*
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
Eine Liste der Sperren für eine bestimmte Tabelle:
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
Eine Liste der 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';
Referenz - MySQL-Fehlerbehebung: Was tun, wenn Abfragen nicht funktionieren? Kapitel 6 - Seite 96.
Wenn Sie den Prozess nicht finden können, der die Tabelle sperrt (weil sie bereits tot ist), ist es möglicherweise ein Thread, der immer noch so bereinigt
Abschnitt TRANSAKTION von
show engine innodb status;
Am Ende
---TRANSACTION 1135701157, ACTIVE 6768 sec
MySQL thread id 5208136, OS thread handle 0x7f2982e91700, query id 882213399 xxxIPxxx 82.235.36.49 my_user cleaning up
Wie in einem Kommentar in Clear Transaction Deadlock erwähnt?
Sie können versuchen, den Transaktions-Thread hier direkt mit zu beenden
KILL 5208136;
arbeitete für mich.
Ich hatte ein ähnliches Problem mit Datagrip und keine dieser Lösungen funktionierte.
Nach dem Neustart des Datagrip-Clients war dies kein Problem mehr und ich konnte Tabellen wieder löschen.
INFORMATION_SCHEMA
Datenbank befinden.