CS/Database

Lock을 활용한 concurrency control

gilbert9172 2024. 10. 2. 01:27

 

❒ Description


지금까지 concurrency control이 무엇인지, 왜 필요한지에 대해서 학습했다.

오늘은 동시성 제어를 구현한 기법 중 하나인 Lock과 2PL에 대해서 학습하자.

 

 

 

 

 

❒ Lock의 종류


1. write-lock (exclusive-lock)

쓰기(배타) 락은 다른 트랜잭션이 같은 데이터를 읽거나 쓰는 것(INSERT, UPDATE, DELETE)을 허용하지

않는다. 따라서 잠금이 해제 될 때까지 다른 트랜잭션은 해당 데이터를 읽지도, 쓰지도 못한다.

 

 

2. read-lock (shared-lock)

다른 트랜잭션이 같은 데이터를 읽는 것을 허용한다. 읽기(공유) 잠금은 읽기 잠금끼리는 동시에 접근이

가능하지만, 읽기 잠금이 설정된 데이터에 쓰기 잠금은 사용할 수 없다.

 

 

 

 

 

❒ Lock의 호환성


현재는 read-read를 제외하고는 한 쪽이 Block 되기 때문에 전체 처리량이 좋지 않다.

이 부분은 MVCC에서 개선된다.

 

 

 

 

 

❒ Lock을 사용해도 생기는 이상현상


  • serial schedue #A : A > B
    • x = 300, y = 500
  • serial schedue #A : A > B
    • x = 400, y = 300
  • 위 그림
    • x = 300, y = 300

세 결과가 모두 다르다.

 

 

 

 

 

 

❒ 2PL protocol (two-phase lock protocol)


1. 2PL이란?

2단계 잠금 프로토콜(Two-Phase Locking, 2PL)은 데이터베이스 관리 시스템에서 트랜잭션의 serializability를

보장하기 위한 동시성 제어 기법 중 하나다. 이 프로토콜은 트랜잭션이 데이터에 접근할 때 사용하는 lock의 획득과

해제를 두 단계로 나누어 관리한다. 따라서 트랜잭션에서 모든 locking operation이 최초의 unlock operation보다

먼저 수행됨을 보장한다.

 

 

2. two-Phase

  1. 확장(Growing or Expanding) phase
    • lock을 취득만 가능하고 반환하지는 않는 phase
  2. 축소(Shrinking or Contracting) phase
    • lock을 반환만 하고 취득하지 않는 pahse

 

 

 

 

 

❒ 2PL & Deadlock


2PL에서는 위와 같이 각 트랜잭션이 필요한 락을 서로 반환하지 않는 Deadlock 현상이 발생할 수 있다.

Deadlock을 해결하는 방법은 운영체제에서 해결하는 방법과 비슷하다.

 

 

 

 

 

❒ 2PL의 변형


1. Conservative 2PL

  • 모든 lock을 취득한 뒤 트랜잭션을 시작
  • deadlock-free
  • 실용적이진 않다.

 

2. Strick 2PL (S2PL)

  • 트랜잭션이 commit 또는 rollback될 때 write-lock을 반환한다.
  • strict schedule 보장
  • Recoverability 보장

 

3. Strong Strick 2PL (SS2PL) or Regorous 2PL

  • 트랜잭션이 commit 또는 rollback될 때 read-lockwrite-lock 모두를 반환한다.
    • S2PL 보다 구현이 쉽다.
    • 하지만 lock을 오래 취득하기 때문에 다른 트랜잭션의 wait time이 길어질 수 있다.
  • strict schedule 보장
  • Recoverability 보장