답변:
SHOW ENGINE INNODB STATUS \G
섹션 찾기-
TRANSACTIONS
INFORMATION_SCHEMA 테이블을 사용할 수 있습니다 .
유용한 쿼리
트랜잭션이 대기중인 모든 잠금을 확인하려면 다음을 수행하십시오.
USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;
차단 트랜잭션 목록 :
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
또는
SELECT INNODB_LOCKS.*
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
특정 테이블에 대한 잠금 목록 :
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
잠금을 기다리는 트랜잭션 목록 :
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
참조 - MySQL의 문제 해결 : 무엇을 어떻게하면 쿼리 작동하지 않는다 , 6 장 - 페이지 96.
테이블을 잠그는 프로세스를 찾을 수 없다면 (이미 죽었 기 때문에) 여전히 이렇게 정리중인 스레드 일 수 있습니다.
섹션 TRANSACTION
show engine innodb status;
끝에
---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
Clear transaction deadlock 의 주석에서 언급했듯이
트랜잭션 스레드를 직접 종료 할 수 있습니다.
KILL 5208136;
나를 위해 일했습니다.
Datagrip과 비슷한 문제가 있었지만 이러한 솔루션 중 어느 것도 작동하지 않았습니다.
Datagrip Client를 다시 시작하면 더 이상 문제가되지 않았으며 테이블을 다시 삭제할 수있었습니다.
INFORMATION_SCHEMA
데이터베이스 에 있다는 점에 유의하십시오 .