2012-10-30 10 views

Odpowiedz

102
SHOW ENGINE INNODB STATUS \G 

poszukaj sekcji -

TRANSACTIONS 

Możemy użyć INFORMATION_SCHEMA tabelach.

Przydatne Zapytania -

Aby sprawdzić o wszystkich transakcjach zamki czekają -

USE INFORMATION_SCHEMA 
SELECT * FROM INNODB_LOCK_WAITS; 

zestawienia transakcji blokujących

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

LUB

SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS 
JOIN INNODB_LOCK_WAITS 
    ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID); 

listę blokad na perticular tabeli:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name; 

listę transakcji oczekujących na zamki:

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

referencyjny - MySQL Troubleshooting: What To Do When Queries Don't Work rozdział 6 - strona 96.

+13

Wystarczy zauważyć, że wszystkie wymienione tabele znajdują się w bazie danych "INFORMATION_SCHEMA". –

+4

Czy te tabele InnoDB naprawdę przechowują informacje o blokadach metatdat? Ten wpis na blogu sugeruje inaczej: http://mysql.wisborg.dk/2014/01/13/who-holds-the-metadata-lock-mysql-5-7-3-brings-help/ – Gareth

+0

@Gareth: works till mysql -mysql-5-7-3-. Dziękujemy za aktualizację. – Joddy

35

Jeśli nie możesz znaleźć procesu blokowania tabeli (ponieważ jest martwa), może to być wątek nadal oczyszczania jak ten

sekcji transakcyjna

show engine innodb status; 

na koniec

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

jak wymieniono w komentarzu w Clear transaction deadlock?

można spróbować zabijanie wątku transakcji bezpośrednio, tutaj z

KILL 5208136; 

pracował dla mnie.

+0

fajne. zadziałało – AmanS

4

mysql 5.7 udostępnia informacje o blokad metadanych poprzez tabelę performance_schema.metadata_locks.

Dokumentacja here

0

Miałem podobny problem z Datagrip i żadne z tych rozwiązań nie sprawdziło.

Po ponownym uruchomieniu klienta Datagrip nie było już problemu i mogłem ponownie upuścić tabele.

Powiązane problemy