LOCK을 활용한 concurrency control 기법

백엔드·2023년 8월 30일
0

DB MVCC

목록 보기
1/3

들어가며

해당 강의를 보면서 공부한 내용을 정리하였습니다.

Lock


개념

Lock은 데이터베이스에서 동시성 제어를 위해 사용되는 메커니즘으로, 동일한 데이터에 여러 트랜잭션이 동시에 접근하는 것을 제어하는 데 활용됩니다.

write_lock (exclusive lock)

  • read / write(insert, update, delete) 할 때 사용합니다.
  • Write Lock이 획득되면 다른 트랜잭션은 해당 데이터에 대한 읽기 및 쓰기 작업을 수행할 수 없습니다.

read_lock (shared lock)

  • read 할 때 사용합니다.
  • Read Lock이 획득되면 다른 트랜잭션은 해당 데이터의 쓰기 작업은 차단되고 읽기 작업은 허용합니다.

lock과 관련되 추가 예제



lock을 써도 생기는 이상한 현상 예시

serial schedule #1

serial schedule #2

이상 현상

2PL protocol

개념

2PL 프로토콜은 데이터베이스에서 트랜잭션의 동시성 제어를 위한 기법 중 하나로, 트랜잭션에서 Locking 작업을 두 단계로 나눠 수행하는 프로토콜입니다.

Expanding Phase (확장 단계)

  • 트랜잭션은 Lock을 취득하는 작업만 수행하고, Unlock 작업은 하지 않습니다.
  • 이 단계에서 트랜잭션은 Lock을 취득하고 나면 해당 Lock을 반환하지 않으며 계속 보유합니다.
  • Expanding Phase에서는 다른 트랜잭션과의 충돌을 피하기 위해 취득한 Lock을 해제하지 않습니다.

Shrinking Phase (축소 단계)

  • 트랜잭션이 모든 Lock을 취득한 후, 다음 단계인 Shrinking Phase로 진입합니다.

  • 이 단계에서 트랜잭션은 Lock을 반환하는 작업만 수행하고, 추가적인 Lock을 취득하지 않습니다.

2PL protocol을 통한 이상현상 방지

2PL protocol과 Deadlock

데드락을 완전히 예방하지는 못합니다.

2PL protocol 종류

기본적인 2PL protocol

conservative 2PL

strict 2PL

strong strict 2PL

마무리

read-read를 제외하고는 한쪽이 block되므로 전체 처리량이 좋지 않습니다.

이러한 문제를 해결하기 위해 read-write가 서로 block되는 것을 해결하여 처리량을 높이고자 하였고 해당 방식을 적용한 것이 MVCC입니다

profile
백엔드 개발자

0개의 댓글