메타 데이터 잠금 대기를 표시 한 이후 테이블을 삭제할 수 없습니다.


11

하나의 테이블을 삭제하려고하지만 테이블이 중단되고 'SHOW PROCESSLIST'명령이 표시되면 '메타 데이터 잠금 대기 중'으로 표시됩니다. 심지어 특정 테이블에서 작업을 수행 할 수 없습니다. 아무도 그것을 해결하는 방법을 알고 있습니까?

답변:


8

SELECT 또는 DML (INSERT, UPDATE, DELETE)을 통해 InnoDB 테이블에 액세스하는 경우 메타 데이터 잠금이 올바르게 예상됩니다.

메타 데이터 잠금에 관한 MySQL 문서에 따르면 :

트랜잭션 직렬화를 보장하기 위해 서버는 한 세션이 다른 세션의 완료되지 않은 트랜잭션에 사용 된 테이블에서 데이터 정의 언어 (DDL) 명령문을 수행하도록 허용해서는 안됩니다. 서버는 트랜잭션 내에서 사용되는 테이블에 대한 메타 데이터 잠금을 획득하고 트랜잭션이 종료 될 때까지 해당 잠금의 릴리스를 연기함으로써이를 달성합니다. 테이블의 메타 데이터 잠금으로 인해 테이블 ​​구조가 변경되지 않습니다. 이 잠금 방식은 한 세션 내에서 트랜잭션에 의해 사용중인 테이블을 트랜잭션이 종료 될 때까지 다른 세션에 의해 DDL 문에서 사용할 수 없음을 의미합니다.

즉, 다른 DB 세션이 테이블에 잠금을 보유하고 있는지 여부를 결정해야합니다. 이러한 세션이 완료되지 않은 트랜잭션 인 경우 보류 상태가 될 수 있습니다.

디스크 공간을 신속하게 되돌려 야하는 경우을 실행할 수 있습니다 TRUNCATE TABLE.

암시

다음과 같이 테이블을 삭제하기 전에 테이블 이름을 바꾸십시오.

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

제안은 우리에게 효과가 없었습니다. 대신 우리는 ALTER의 표에 "테이블 메타 데이터의 잠금 대기"얻을 foo이름 바꾸기footodrop
Motin

@Motin은 하나 이상의 DB 연결이 여전히 테이블에 액세스하고 있다는 것 foo입니다. 모든 연결이 완료되면 ALTER TABLE진행할 수 있습니다.
RolandoMySQLDBA 2016 년

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.