[MySql, MariaDB] DB Lock 확인 및 Kill 방법

갑자기 DB Lock 이 걸려 서버 장애가 생기는 경우가 있다. 그럴 경우 빠르게 Kill을 해줘서 장애를 해결 해야 한다.

[DB Lock 걸린 트랜잭션 조회]

우선 트랜잭션 관련 아래 명령어 3개가 있다. 1번은 어떤 쿼리가 락을 걸어버렸는지 확인 할 수 있고, 2번은 락이 걸려 있는 테이블에서 작업하려고 대기중인 상태이고, 3번은 실행중인 트랜잭션이다. 

# 락을 걸어 버린 트랜잭션 확인
1. SELECT * from information_schema.INNODB_LOCKS;

# 락이 걸려 대기중인 트랜잭션
2. SELECT * from information_schema.INNODB_LOCK_WAITS;

# 트랜젝션 확인
3. SELECT * from information_schema.INNODB_TRX;

 

그러면 위 중에 어떤걸 검색해서 kill을 해야 하냐면 1번에서 락을 걸어버린 테이블을 kill 하고 2번은 조회하고 또 kill을 해줘야 한다. 만약 1, 2번을 조회해서 kill을해도 계속 쌓인다고 하면 어쩔수 없이 DB를 재시작 하는 수 밖에 없다. 

 

만약에 실행중인 쿼리문이 select 문이 아니라면 kill 하는 걸 최대한 지양해야 한다. 어떤 데이터 조작을 실행 시켰는데 안되면 문의가 올수 있기 때문이다.

 

[트랜잭션 kill 방법]

트랜잭션 kill 하는 방법은 kill [trx_id]  명령어로 킬을 하면 된다.

 

ex) KILL 421471883864240

댓글

Designed by JB FACTORY