Database

Lock & 2PL

kyoulho 2024. 8. 17. 13:52

Write-Lock (Exclusive Lock)

Write-Lock은 데이터베이스에서 특정 데이터 항목에 대해 쓰기 operation이 수행될 때, 해당 데이터 항목에 배타적 잠금을 거는 메커니즘이다.

특징:

  • 배타적 잠금: 한 트랜잭션이 데이터를 수정하기 위해 write-lock을 획득하면, 다른 트랜잭션은 해당 데이터에 대해 읽기(read)나 쓰기(write) operation을 수행할 수 없다. 이는 데이터의 무결성을 유지하기 위한 중요한 메커니즘이다.
  • 경합 가능성: 여러 트랜잭션이 동일한 데이터에 대해 동시에 write-lock을 시도하면 경합이 발생하며, 이로 인해 데드락(교착 상태) 등이 발생할 수 있다.

예시:

  1. T1 트랜잭션이 변수 x의 값을 20으로 변경하기 위해 write-lock을 획득한다.
  2. T2 트랜잭션이 같은 변수 x의 값을 90으로 변경하기 위해 write-lock을 시도한다.
  3. 만약 T1x에 대해 write-lock을 획득한 경우, T2T1이 operation을 완료하고 write-lock을 해제할 때까지 대기해야 한다.
  4. T1이 operation을 완료하고 잠금을 해제한 후, T2x90으로 변경할 수 있다.

 

Read-Lock (Shared Lock)

Read-Lock은 데이터베이스에서 특정 데이터 항목에 대해 읽기 operation이 수행될 때, 해당 데이터 항목에 대한 읽기 잠금을 설정하는 메커니즘이다.

특징:

  • 공유 잠금: 여러 트랜잭션이 동시에 동일한 데이터에 대해 read-lock을 획득할 수 있다. 이를 공유 잠금이라고 하며, 데이터의 일관성을 유지하면서 다중 트랜잭션이 데이터를 읽을 수 있게 해 준다.
  • 경합 없음: 여러 트랜잭션이 동일한 데이터에 대해 read-lock을 동시에 획득할 수 있으므로, 일반적으로 read-lock에 의한 경합은 발생하지 않는다.
  • 쓰기 제한: read-lock이 걸린 데이터는 다른 트랜잭션에 의해 변경될 수 없다. 즉, 쓰기 operation이 제한된다. 이는 읽기 중에 데이터가 변경되지 않도록 하기 위함이다.

예시:

  1. T1 트랜잭션이 변수 y를 읽기 위해 read-lock을 획득한다.
  2. T2 트랜잭션도 변수 y를 읽기 위해 read-lock을 획득한다.
  3. 두 트랜잭션은 변수 y를 읽을 수 있지만, 이 동안에는 어떤 트랜잭션도 y에 대해 쓰기 operation을 수행할 수 없다.
  4. T1T2가 operation을 완료하고 read-lock을 해제한 후에야 y에 대해 쓰기 operation이 가능해진다.

 

 

Two-Phase Locking (2PL)

2PL은 데이터베이스 트랜잭션의 일관성과 직렬성을 보장하기 위한 잠금 프로토콜이다. 2PL은 트랜잭션의 실행 순서를 조정하여 트랜잭션이 직렬화된 것처럼 동작하도록 하며, 이를 통해 데이터의 무결성과 일관성을 유지한다.

 

2PL의 작동 원리

  1. Expanding Phase (Growing Phase)
    • 트랜잭션이 실행되는 동안 필요한 모든 잠금을 획득하는 단계이다.
    • 이 단계에서는 새로운 잠금을 추가로 획득할 수 있지만, 이미 획득한 잠금을 해제할 수는 없습니다. 모든 필요한 잠금을 획득한 후에만 Shrinking Phase로 넘어간다.
  2. Shrinking Phase (Contracting Phase)
    1. 트랜잭션이 모든 작업을 완료한 후 잠금을 해제하기 시작하는 단계이다.
    2. 이 단계에서는 잠금을 해제할 수 있지만, 새로운 잠금을 추가로 획득할 수는 없다. 모든 작업이 완료된 후에는 트랜잭션이 종료된다.

2PL의 특징

  • 직렬성 보장: 2PL을 적용하면, 트랜잭션이 직렬적으로 실행된 것과 동일한 효과를 가진다. 즉, 트랜잭션의 스케줄이 순차적으로 실행된 것처럼 동작하여 데이터베이스의 일관성을 유지한다.
  • 스케줄의 직렬화: 2PL은 트랜잭션 간의 잠금 획득과 해제 순서를 규정하여, 결과적으로 직렬화 가능한 스케줄을 보장한다.
  • 데드락 가능성: 자원의 락을 소유한 체 다른 자원의 락을 기다리는 데드락이 발생할 수 있다. 이를 해결하기 위해 추가적인 데드락 탐지 및 회피 기법이 필요하다.

2PL의 적용 예시

  1. 트랜잭션 T1이 변수 x에 대해 읽기 잠금을 획득하고, 이어서 변수 y에 대한 잠금을 추가로 획득 (Expanding Phase)
  2. T1이 변수 x와 y를 수정
  3. T1이 변수 x에 대한 잠금을 해제하고 (Shrinking Phase), 이어서 변수 y에 대한 잠금을 해제

2PL의 변형

  • Conservative 2PL
    • 특징: 모든 잠금을 트랜잭션 시작 전에 미리 획득한다.
    • 장점: 데드락이 발생하지 않는다.
    • 단점: 모든 잠금을 미리 획득해야 하므로 비효율적이다.
  • Strict 2PL (S2PL)
    • 특징: Strict schedule을 보장하며, write-lock을 commit/rollback 시에 반환한다.
    • 장점: Recoverability를 보장한다.
    • 단점: 전체 처리량이 좋지 않다.
  • Rigorous 2PL (SS2PL)
    • 특징: Strict schedule을 보장하며, read-lock과 write-lock을 commit/rollback 시에 반환한다.
    • 장점: S2PL보다 구현이 용이하며, 성능이 개선될 수 있다.
    • 단점: 여전히 전체 처리량에 영향을 미칠 수 있다.

'Database' 카테고리의 다른 글

DBCP (Database Connection Pooling)  (0) 2024.08.17
MVCC (Multiversion Concurrency Control)  (0) 2024.08.17
Isolation Level  (0) 2024.08.16
Recoverability  (0) 2024.08.16
Serializability  (0) 2024.08.16