축소 단계에 들어가면 읽기 락과 쓰기 락을 둘 다 먼저 풀 수 있습니다.
모두 2PL이므로 확장 단계에서는 락을 획득만 하고, 한 번 해제를 시작하면 새 락을 다시 잡지 못합니다. 변형은 그 이후 S-Lock과 X-Lock 중 무엇을 끝까지 숨기느냐로 갈립니다.
그래서 모든 변형이 기본적으로 충돌 직렬 가능성을 만족합니다.
축소 단계에 들어간 뒤 무엇을 먼저 풀 수 있느냐가 Basic, Strict, Rigorous를 나눕니다.
가장 느슨한 형태
축소 단계에 들어가면 읽기 락과 쓰기 락을 둘 다 먼저 풀 수 있습니다.
T1이 쓴 값을 T2가 읽은 뒤 T1이 ROLLBACK하면, 연쇄 복귀가 이어질 수 있습니다.
실무에서 가장 많이 쓰는 균형점
축소 단계에서 읽기 락은 풀릴 수 있지만, 쓰기 락은 아직 남아 있습니다.
X-Lock을 COMMIT / ROLLBACK까지 유지해서 미완료 쓰기를 밖으로 내보내지 않습니다.
다른 트랜잭션은 아직 확정되지 않은 값을 읽지 못하므로, 문제가 생겨도 보통 원인 트랜잭션 안에서 끝납니다.
가장 보수적인 형태
읽기와 쓰기에 걸린 락을 모두 종료 시점까지 유지합니다.
읽기 결과와 쓰기 결과 모두 더 늦게 공개되므로, 세 변형 중 가장 강한 보장을 제공합니다.
Basic → Strict → Rigorous로 갈수록 종료 전까지 숨기는 범위가 커집니다. 즉, 2PL의 변형은 새로운 규칙을 추가하는 것이 아니라 "언제 락을 풀어도 되는가"를 더 보수적으로 좁혀 가는 단계입니다.