Metadata Locking
Matadata Locking이란 사용중인 오브젝트의 변경(DDL)을 방지해주는 Locking 기술로, 유효한 트랜잭션에서 사용중인 오브젝트를 변경할 수 없도록 하는 것이다.
MariaDB에서는 사용중인 오브젝트 접근과 데이터 일관성 유지를 위해서 Metadata Locking 을 사용하는데, 오브젝트에는 테이블뿐만 아니라 procedure, function, trigger, event가 포함된다.
autocommit이 "OFF"일 때는 Metadata Lock을 특히 주의해야 한다. autocommit이 "OFF"일 때는 무슨 쿼리가 실행되든 (SELECT만 해도) 트랜잭션이 시작되고, 해당 쓰레드에서 COMMIT 이나 ROLLBACK 등으로 트랜잭션을 종료하기 전에는 계속 해당 트랜잭션은 계속 유효한 상태로 남아 있게 된다.
즉, autocommit이 "OFF"일 때는 SELECT만 해도 사용된 모든 오브젝트에 Metadata Lock이 설정되므로 DML(insert, update, delete, select)은 되지만 DDL(truncate, alter, create index, replace 등)은 할 수 없는 상태가 된다. Metadata Lock 때문에 사용빈도가 높은 function(예:코드에 매칭되는 부서명찾기 등)을 운영 시간대에 변경하기는 매우 어려울 수 있다. 굳이 변경하려면 Metadata Lock을 잡고 있는 모든 쓰레드를 죽인 후에 적용해야 하므로 데이터가 유실되지는 않을지 주의해서 확인한 후에 변경할 수 있어야 한다.