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
테이블 락이 있는지 확인한다.