Waiting for table metadata lock 재현하기 


이 때 의도적으로 지연해야 하기 sleep 함수를 사용한다.

https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_sleep


* A session - 일반 계정


start transaction;

select * from target_ids_job_execution where sleep(1000)=0;


* B session - root


MariaDB [test]> ALTER TABLE target_ids_job_execution  add column xxx char(32) default 'xyz';

행(hang)


* C Session - root

show processlist; 



sleep을 포함한 sql 쿼리가 끝나도 여전히 alter table은 hang 걸려 있다. lock에 잡혀 있다. 



따라서 KILL 6을 실행해 metadata lock에 걸려 있는 쿼리를 종료시킨다.


show processlist를 실행하면 다음과 같은 결과가 나타난다.






Posted by 김용환 '김용환'

댓글을 달아 주세요