개발자가 되고 싶은 준개발자

[mysql] DDL 지연 현상 해결 방법 본문

MySQL/mysql

[mysql] DDL 지연 현상 해결 방법

준개발자 2023. 1. 3. 19:05

사전에 테이블 락이 있는지 아래 쿼리를 통해 확인하고 쿼리를 수행해도 쿼리가 다른 트랜잭션에 밀려 실행이 안 되는 현상이 있었다.

#테이블 락 확인

SHOW OPEN TABLE WHERE In_use > 0;

 

이럴 경우 오래 실행되고 있는 트랜잭션이 있는지, 메타데이터 락이 있는지 추가로 확인해보면 도움이 될 수 있다.

#트랜잭션 확인

select * from information_schma.innodb_trx \G

보면 3월 1일부터 실행되었던 트랜잭션이 있다. kill 166941076(스레드 id)로 해당 스레드를 죽인다.

위 트랜잭션은 show processlist의 상단에서도 확인할 수 있었다.

죽이고 나니 원래 실행하려던 DDL 구문이 바로 실행되었다.

 

#기타 확인해 볼 것: 메타데이터 락 확인

select object_type, object_schema, object_name, lock_type, lock_status, thread_id, processlist_id, processlist_info 
from performance_schema.metadata_locks 
inner_join performance_schema.threads on thread_id = owner_thread_id 
where processlist_id <> connection_id();

 # innodb engine status

show engine innodb status \G

테이블 락이 있는지 확인한다.