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.