Post

Lock & 2PL(Two-Phase Locking)

트랜잭션 격리 수준을 보장하기 위한 Lock과 2-Phase Locking에 대해 알아보자.

Lock & 2PL(Two-Phase Locking)

Lock

  • 트랜잭션이 데이터에 접근할 때, 다른 트랜잭션이 해당 데이터를 읽거나 수정하지 못하도록 차단하는 메커니즘
  • Lock을 사용하여 트랜잭션 간의 동시성을 제어하고, 데이터의 일관성을 유지할 수 있다.
  • Lock은 트랜잭션이 데이터를 읽거나 수정할 때, 해당 데이터에 대한 접근을 제어하는 역할을 한다.

Write-Lock

  • read / write 할 때 사용하는 Lock
  • 다른 트랜잭션이 해당 데이터를 읽거나 수정할 수 없도록 차단
  • Exclusive Lock, X Lock이라고도 불림

Read-Lock

  • read 할 때 사용하는 Lock
  • 다른 트랜잭션이 해당 데이터를 읽을 수 있지만, 수정할 수는 없음
  • 여러 트랜잭션이 동시에 읽을 수 있지만, 쓰기는 불가능
  • Shared Lock, S Lock이라고도 불림

Lock 호환성

  • Read-Lock 상태에서 다른 트랜잭션이 Read-Lock을 요청하면, 해당 트랜잭션은 Read-Lock을 획득할 수 있다.
  • Read-Lock 상태에서 다른 트랜잭션이 Write-Lock을 요청하면, 해당 트랜잭션은 대기 상태가 된다.
  • Write-Lock 상태에서 다른 트랜잭션이 Read-Lock 또는 Write-Lock을 요청하면, 해당 트랜잭션은 대기 상태가 된다.

2PL (Two-Phase Locking)

  • Lock을 사용해서 발생할 수 있는 이상 현상을 방지하기 위한 프로토콜
  • 트랜잭션이 Lock을 획득하는 단계와 Lock을 해제하는 단계로 나누어 구성된다.
  • tx에서 모든 locking operation이 최초의 unlock operation 이전에 발생해야 한다.
  • Serializability를 보장하지만 Deadlock이 발생할 수 있다.
단계설명
Expansion Phase (Growing Phase)트랜잭션이 Lock을 획득하는 단계
Contraction Phase (Shrinking Phase)트랜잭션이 Lock을 해제하는 단계

Conservative 2PL

  • 모든 lock을 취독한 뒤 transaction을 시작하는 방식
  • deadlock이 발생하지 않는다.
  • 모든 lock을 취득하는 방식이 불가능한 경우가 있기 때문에, Conservative 2PL은 실제로 사용되지 않는다.

Strict 2PL (S2PL)

  • strict schedule을 보장하는 2PL
  • recoverability를 보장한다.
  • write-lock을 commit/rollback하기 전까지 해제하지 않는다.
  • 실제로 많이 사용되는 방식

Storng Strict 2PL (SS2PL or Rigorous 2PL)

  • strict schedule을 보장하는 2PL
  • recoverability를 보장한다.
  • read-lock / write-lock을 commit/rollback하기 전까지 해제하지 않는다.
  • S2PL보다 구현이 쉽다.
This post is licensed under CC BY 4.0 by the author.