2PL
태그 :
- 개념
- 직렬성 보장을 통해 동시성을 제어하는 2단계 로킹 기법
1. 직렬성 보장을 통해 동시성을 제어하는 2단계 로킹 기법
가. 2PL(2Phase Locking) 규약
모든 트랜잭션들이 lock과 unlock연산을 확장단계와 수축단계로 구분하여 수행함
확장단계 |
트랜잭션은 lock 만 수행할 수 있고 unlock은 수행할 수 없는 단계 |
수축단계 |
트랜잭션은 unlock 만 수행할 수 있고 lock은 수행할 수 없는 단계 |
나 . 2단계 로킹 규약 이론(Two-Phase locking protocol theorem)
- 모든 로킹 연산(read_lock, write_lock) 들이 최초의 unlock 연산 보다 앞에 나오는 경우, 그 트랜잭션은 2단계 로킹 프로토콜을 준수
- 만일 모든 트랜잭션들이 2단계 로킹 규약을 준수한다면, 모든 트랜잭션들은 직렬성을 보장받게 됨
- 그 역은 성립하지 않음.
- 직렬가능성을 보장할 수 있는 규약으로 가장 많이 사용됨
2. 2단계 로킹의 개념도 및 2단계 로킹의 이해
가. 2단계 로킹의 개념도
나. basic 2단계 로킹의 이해
T1 |
T2 |
lock-X(A) Read(A) A := A + 100 write(A) Unlock(A) |
|
|
Lock-X(A) read(A) A := A * 2 write(A) unlock(A) lock=X(B) read(B) B := B * 2 write(B) unlock(B) |
Lock-X(B) Read(B) B := B + 100 Write(B) Unlock(B)
Assume A=100, B=200 serial schedule(T1) : A = 200, B = 300 This schedule : A = 400, B = 500 |
|
-T2는 2PL이 준수되었지만, T1은 2PL이 준수되지 않음, 따라서 직렬성이 보장되지 않음 -> T1 에 대한 값이 예상값과 다르게 출력됨
T1 |
T2 |
lock-X(A) Read(A) A := A + 100 write(A) lock(B) Unlock(A) |
|
|
Lock-X(A) read(A) A := A * 2 write(A) |
read(B) B := B + 100 Write(B) Unlock(B) |
|
Assume A=100, B=200 serial schedule(T1) : A = 200, B = 300 This schedule : A = 200, B = 300 |
Lock(B) Unlock(A) Read(B) B := B * 2 Write(B) Unlock(B) |
- T1,T2 은 2PL 준수, 직렬성 보장됨
- T1 의 값이 예상값과 같은 값으로 출력됨
(* UNLOCK 의 시점을 commit/abort 시점으로 보면 이해하기 쉬울 것으로 보임
T2의 UNLOCK 시점이 T1 의 값에 영향을 주지 못하게 됨.)
3. 2단계 로킹 기법의 문제점 및 피하기 위한 2단계 로킹 기법
가. 2단계 로킹 기법의 문제점
- 2단계 로킹 기법이 deadlocks의 완전한 제거를 나타내지는 못함
- 2단계 로킹 기법 상태에서 Cascading rollback이 가능함
- 교착상태 예방과 교착상태 탐지로 해결
- 기본적인 2단계 로킹 기법의 문제점을 피하기 위한 로킹 기법
종류 |
Strict 2PLP (Strict 2 Phase Locking Protocol) |
Rigorous 2PLP (Rigorous 2 Phase Locking Protocol) |
Static (Conservative) 2PL |
내용 |
- 2단계 로킹 - 모든 독점 lock(Lock-X)는 그 Transaction이 완료될 때까지 unlock 하지 않음. 그대로 유지 - Commits/Aborts가 수행될 때까지 모든 exclusive locks을 잡고 있어야 함 |
- 2단계 로킹 - 모든 lock는 그 Transaction이 완료될 때까지 unlock 하지 않음. - 트랜잭션은 Commits/Aborts가 수행될 때까지 모든 locks을 잡고 있어야 함 |
- Transaction 수행 전부터 그 Transaction의 읽기 집합과 쓰기집합을 미리 선언하여 그 Transaction이 접근하려는 모든 항목들에 Lock을 획득 |
특징 |
- 연쇄복귀(Cascading rollback) 문제 발생하지 않음 |
Strict 2PLP보다 더 제한적임 |
Dead lock 발생 하지 않음. 현실성 없음 |
- 대부분의 상용 데이타베이스 시스템 : 엄밀 2PLP나 엄격 2PLP 사용
2단계 로킹 규약 직렬가능성을 보장하지만 반면에 교착상태(deadlock)는 해결하지 못함