[jpa Series] 18.mvccandlock
December 19, 2024
MVCC
- Multi Version Concurrency Control이다.
- 레코드 수준의 트랜잭션 지원을 위해서 사용
- 멀티 버전이라는 것은 스냅샷을 통해서 하나의 레코드에 대해 여러 버전이 관리되는 것을 의미한다.
- undo log를 활용한다.
buffer pool
- 디스크에 저장된 테이블과 페이지를 캐시해 두는 공간이다.
Undo log
- undolog는 트랜잭션 격리 수준을 보장하기 위해서 백업해둔 변경 전의 데이터
- 트랜잭션이 열린 동안 변경 사항을 버퍼풀에 적용하고 undolog에 스냅샷을 찍어둔다.
redo log
- 데이터 변경 사항을 리두로그에 보관하고 서버가 비정상적으로 종료했을 때 일관된 데이터를 갖을 수 있도록 도와준다.
Lock
종류
- SharedLock(s-lock)
- row-level 락
- 읽기 락이라고 한다.
- 다른 트랜잭션에서 읽기 연산만 가능, 쓰기 연산은 불가능
- 다른 트랜잭션도 공유 락이 걸려도 읽을 수는 있다.
- ExclusiveLock(x-lock)
- 쓰기 락이라고 한다.
- 다른 트랜잭션에서 읽기, 쓰기 연산 불가능
- 해당 데이터에 대한 독점권을 갖는다.
- intention lock
상황에 따라
MYSQL
- global lock
- named lock
- 임의의 문자열에 대해서 잠금
- 애플리케이션 서버에서 동기화를 위해서 간혹 사용
- metadata lock
InnoDB
- 레코드 락
- 테이블 레코드 자체를 잠그는 락
- 정확히는 테이블 레코드가 아니라 인덱스를 잡근다.
- 갭락
- 레코드와 레코드 사이의 간격을 잠근다.
- 생성, 수정, 삭제를 제어하기 위해서 잠그는 것이다.
- 정렬된 인덱스 사이에 CUD 작업 시 어디에 들어갈지 몰라 미리 잠궈두고 작업 후 푸는 형태로 진행된다.
- 즉, 아직 존재하지 않지만 지정된 범위에 해당하는 인덱스 테이블 공간을 대상으로 거는 것이다.
- 일종의 가상 레코드가 있다고 가정하고 생성할 수도 있다.
- 넥스트 키 락
- 레코드락 + 갭락
- 레플리카 서버에서 실행될 때 소스 서버와 싱크를 맞추기 위함이 주목적이다.
- auto increment lock
- 중복 없는 순차 번호를 위해 거는 락
- 테이블 수준의 잠금의 락이다.
- Insert에서 사용된다.