[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