2010년 12월 26일 일요일

InnoDB에서 사용되는 Lock의 개요

InnoDB lock의 기본 특성
  • Pessimistic locking
  • Graph 를 이용한 데드락 감지
  • 레코드 기반의 락
  • 락이 많아진다고 해서 Escalation되지 않음 (페이지나 테이블 단위의 락으로 업그레이드 되지 않음)
  • Waiting timeout 기능 지원 (상이한 Storage engine간의 무한 대기 방지)
  • 레코드와 Index에 기반한 잠금 -> 다들 그냥 넘어가는 부분이지만, 상당히 중요한 의미를 가짐
  • 묵시적인 락은 페이지 단위로 Bitmap 구조체로 관리됨 (디스크상에서도 관리됨)
    -> 명시적인 락을 유발하지 않는 모든 쿼리 (락 관련 힌트를 포함하지 않는 쿼리)
  • 명시적인 락은 InnoDB Buffer pool의 Bitmap 구조체로 관리됨 (메모리상에서만 관리됨)
    -> FOR UPDATE, LOCK IN SHARE MODE와 같은 락 관련 힌트를 포함한 쿼리
  • 락 정보는 레코드 한건 한건에 대해서 3~8비트를 사용하며, 상당히 캠팩트해서 락 에스컬레이션이 발생하지 않는다고 함

잠금 대상에 따른 락 구분
  • 레코드 락
  • Gap 락
  • Next-key 락
  • Auto-increment 락
  • Insert intention lock

공유 여부에 따른 락 구분
  • Shared lock
  • Exclusive lock

MySQL 와의 호환을 위한 InnoDB의 테이블 락
  • Intention Shared lock
  • Intention Exclusive lock

댓글 없음:

댓글 쓰기