Blog
책 리뷰
리얼 MySQL
Deadlock

InnoDB 데드락 (Deadlock)

  • InnoDB 스토리지 엔진은 내부적으로 잠금이 교착 상태에 빠지지 않았는지 체크하기 위해 잠금 대기 목록을 그래프 형태로 관리
  • 교착 상태에 빠진 트랜잭션들 중 하나를 강제로 종료함
    • 어느 트랜잭션을 강제 종료할 것인지 판단하는 기준은 트랜잭션의 언두 로그 양
      • 언두 로그 양이 적은 트랜잭션을 강제 종료
      • 강제 롤백으로 인한 MySQL 서버의 부하를 최소화하기 위함
  • MySQL 엔진에서 관리되는 테이블 잠금은 볼 수가 없어서 데드락 감지가 불확실할 수 있는데 innodb_table_locks 시스템 변수를 활성화하면 InnoDB 스토리지 엔진 내부의 레코드 잠금뿐 아니라 테이블 레벨의 잠금까지 감지할 수 있음

innodb_table_locks 시스템 변수 확인

시스템 변수 확인 쿼리
SHOW VARIABLES LIKE 'innodb_table_locks'; -- 확인

설정 방법 - my.cnf 파일에 아래와 같이 설정 추가

my.cnf 파일에 설정 추가
innodb_table_locks = ON

위 설정 추가 후 MySQL 서버 재시작