답변:
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;
foo
입니다. 모든 연결이 완료되면 ALTER TABLE
진행할 수 있습니다.
다음을 실행하여 트랜잭션 잠금을 일으키는 쿼리를 찾아야합니다.
SHOW ENGINE INNODB STATUS
이라는 섹션을 참조하십시오 TRANSACTION
. 나중에 데이터베이스를 삭제하려면 해당 쿼리를 종료해야합니다.
foo
이름 바꾸기footodrop