철학과 학생의 개발자 도전기

Lock과 MVCC 본문

데이터베이스

Lock과 MVCC

Younghun 2023. 11. 5. 11:26

1. Lock

  • 읽기 혹은 쓰기 잠금을 통해 다중 트랜잭션의 상호 간섭을 방지한다.

낙관적 동시성 제어

  • 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정
  • 데이터 읽는 시점에 Lock을 걸지 않고, 수정 시점에 값이 변경되었는지 검사
  • Q. 동시에 수정된다면?: 마지막 커밋만 적용하기 등 전략 설정 필요

비관적 동시성 제어

  • 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정
  • 데이터를 읽는 시점에 Lock을 걸고, 트랜잭션이 완료될 때 까지 유지
  • 공유락: 다른 공유락을 허락함 -> 읽기 잠금으로 사용
  • 베타락: 다른 모든 락을 허락하지 않음 -> 쓰기 잠금으로 사용

2. MVCC

  • Multi Version Concurrency Control (다중 버전 동시성 제어)
  • 동시 접근을 허용하는 데이터베이스에서 동시성을 제어하는 방법

동작 과정

  • 사용자는 데이터 접근 시점의 snapshot을 읽는다.
  • 데이터 수정 시 이전 버전의 데이터는 UNDO 영역에 기록된다.
    • 트랜잭션 롤백 시 UNDO 영역의 데이터를 불러온다.
    • 트랜잭션 격리 수준에 맞는 영역의 데이터에 접근할 수 있다.
  • 데이터 변경 내용은 REDO 영역에도 기록된다.
    • 버퍼와 디스크 간의 일관성 문제를 해결할 수 있다.
    • DB 서버가 비정상적으로 종료된 경우에 필요하다.
    • 사례 1. 커밋되었지만 디스크에 저장되지 않은 데이터
    • 사례 2. 롤백되었지만 디스크에 저장된 데이터
  • 이를 통해 트랜잭션 격리와 데이터 일관성을 보장할 수 있다.

장점

  • 데이터를 읽을 때, 다른 사용자의 수정에 영향을 받지 않는다.
  • 락이 필요없어서 속도가 빠르다.

단점

  • 사용하지 않는 이전 버전의 데이터를 정리해야 한다.
  • 데이터 버전의 충돌을 애플리케이션이 해결해야 한다.
  • UNDO 영역 생성 및 관리 등의 오버헤드가 발생한다.

'데이터베이스' 카테고리의 다른 글

NoSQL과 Redis  (0) 2023.11.09
옵티마이저  (0) 2023.11.05
트랜잭션  (0) 2023.10.29
인덱스  (0) 2023.10.28
이상과 정규화  (0) 2023.10.27