같은 2PL, 다른 종료 규칙

세 변형의 차이는 트랜잭션이 끝날 때까지 붙드는 락이 어디까지냐에 있습니다.

모두 2PL이므로 확장 단계에서는 락을 획득만 하고, 한 번 해제를 시작하면 새 락을 다시 잡지 못합니다. 변형은 그 이후 S-LockX-Lock 중 무엇을 끝까지 숨기느냐로 갈립니다.

공통 전제
확장 단계에서는 락을 추가로 잡을 수 있지만, 풀지는 않습니다.

그래서 모든 변형이 기본적으로 충돌 직렬 가능성을 만족합니다.

갈라지는 지점은 첫 unlock 이후

축소 단계에 들어간 뒤 무엇을 먼저 풀 수 있느냐가 Basic, Strict, Rigorous를 나눕니다.

변형
축소 단계에서 풀 수 있는 락
종료까지 유지하는 락
왜 중요한가
Basic 2PL

가장 느슨한 형태

축소 단계에 들어가면 읽기 락과 쓰기 락을 둘 다 먼저 풀 수 있습니다.

미리 남겨 두는 락 없음
미완료 쓰기가 노출될 수 있음

T1이 쓴 값을 T2가 읽은 뒤 T1이 ROLLBACK하면, 연쇄 복귀가 이어질 수 있습니다.

Strict 2PL

실무에서 가장 많이 쓰는 균형점

축소 단계에서 읽기 락은 풀릴 수 있지만, 쓰기 락은 아직 남아 있습니다.

X-Lock을 COMMIT / ROLLBACK까지 유지해서 미완료 쓰기를 밖으로 내보내지 않습니다.

연쇄 복귀를 막는 기본 축

다른 트랜잭션은 아직 확정되지 않은 값을 읽지 못하므로, 문제가 생겨도 보통 원인 트랜잭션 안에서 끝납니다.

Rigorous 2PL

가장 보수적인 형태

축소 단계에서 미리 푸는 락 없음

읽기와 쓰기에 걸린 락을 모두 종료 시점까지 유지합니다.

가장 엄격한 순서 고정

읽기 결과와 쓰기 결과 모두 더 늦게 공개되므로, 세 변형 중 가장 강한 보장을 제공합니다.

Basic → Strict → Rigorous로 갈수록 종료 전까지 숨기는 범위가 커집니다. 즉, 2PL의 변형은 새로운 규칙을 추가하는 것이 아니라 "언제 락을 풀어도 되는가"를 더 보수적으로 좁혀 가는 단계입니다.