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
댓글 없음:
댓글 쓰기