본문 바로가기
Mysql

[Mysql] Metadata Locking

by Ssun's 2021. 11. 4.

Metadata Locking이란?

사용중인 오브젝트의 변경(DDL)을 방지해주는 기술로, 유효한 트랜잭션에서 사용중인 오브젝트를 변경할 수 없도록 하는 것을 말함

 

MariaDB에서는 사용중인 오브젝트 접근과 데이터 일관성 유지를 위해 Metadata Locking을 사용

이때, 오브젝트는 Table, procedure, function, trigger, event 등

 

autocommit이 "OFF"일 때 무슨 쿼리가 실행되든(SELECT포함) 트랜잭션이 시작되고, 해당 쓰레드에서 COMMIT이나 ROLLBACK 등으로 트랜잭션을 종료하기 전에는 해당 트랜잭션은 유효한 상태로 남아 있음

 

즉, autocommit이 "OFF"일 때는 SELECT만 해도 사용된 모든 오브젝트에 Metadata Lock이 설정되므로 DDL은 실행할 수 없음

 

사용빈도수가 높은 오브젝트일수록 운영 시간대에 변경하기는 어렵고, 굳이 변경하기 위해서는 Metadata Lock을 잡고 있는 모든 쓰레드를 죽인 후에 적용해야 하므로 데이터 유실에 주의 필요

 

 

 

metadata lock이 잡힌 경우 "Wating for table metadata lock" 이란 메시지가 나오면서 멈춤

 

이를 해결하기 위해서는 프로세스 번호를 알아내 kill하면 그 프로세스가 종료되고 metadata lock이 해제됨

-> SHOW FULL PROCESSLIST; 실행 결과에서 State에 Wating for table metadata lock이란 메시지가 있다면 해당 프로세스의 id를 찾아 KILL 프로세스_id; 를 입력. 실행

반응형

댓글