반응형
어떤 트랜잭션이 "테이블 메타 데이터 잠금 대기 중"상태를 유발하는지 어떻게 알 수 있습니까?
테이블에서 일부 DDL을 수행하려고 SHOW PROCESSLIST
하는데 "Waiting for table metadata lock"메시지가 나타납니다.
아직 마감되지 않은 거래를 어떻게 알 수 있습니까?
MySQL v5.5.24를 사용하고 있습니다.
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;
나를 위해 일했습니다.
mysql 5.7은 performance_schema.metadata_locks
테이블을 통해 메타 데이터 잠금 정보를 노출 합니다.
여기에 문서화
Datagrip과 비슷한 문제가 있었지만 이러한 솔루션 중 어느 것도 작동하지 않았습니다.
Datagrip Client를 다시 시작하면 더 이상 문제가되지 않았으며 테이블을 다시 삭제할 수있었습니다.
반응형
'Programing' 카테고리의 다른 글
모든 문자와 숫자의 배열 생성 (0) | 2020.09.13 |
---|---|
Python 로깅 모듈을 사용할 때 중복 로그 출력 (0) | 2020.09.13 |
Swift 프로그램에서 autoreleasepool을 사용해야합니까? (0) | 2020.09.13 |
조건부 고유 제약 (0) | 2020.09.13 |
Vim에서 현재 파일의 경로를 영구적으로 표시하려면 어떻게해야합니까? (0) | 2020.09.13 |