
출처: https://sewonzzang.tistory.com/76
인터리빙으로 동작하는 트랜잭션 스케쥴이 Serializable Schedule 인지 매번 검사하는 것은 쉽지 않은 일이다.
그래서 DBMS는 직렬 가능 스케쥴인지 검사하기 보다는 직렬 가능성을 보장하는 Concurrency Control 기법을 사용한다.
즉, 모든 트랜잭션들이 직렬 가능성이 보장되는 규약을 따르도록 하는 것이다.
Concurrency Control에는 Lock을 사용하는 것과 MVCC를 사용하는 것을 알아보자.
DB Lock은 같은 데이터 동시에 접근하려는 여러 트랜잭션 간에 상호 배제를 제공하는 동기화 메커니즘이다.

다른 트랜잭션이 같은 데이터를 Read/Write 하는 것을 허용하지 않는다.

다른 트랜잭션이 같은 데이터를 Read하는것을 허용한다.

| Read Lock | Write Lock | |
|---|---|---|
| Read Lock | O | X |
| Write Lock | X | X |


TX에서 모든 Locking Operation이 Unlocking Operation보다 먼저 수행되도록 하는 것
Expanding Phase, Shrinking Phase로 구분할 수 있다.Expanding Phase: Lock을 획득만하고 반환하지 않는 PhaseShrinking Phase: Lock을 반환만하고 획득하지 않는 Phase
2PL로 동작할 때 Deadlock이 발생할 수 있다.

모든 Lock을 취득한 뒤 TX 시작 -> deadlock free but 실용적이지 않다.

Commit할 때 Write Lock을 반환하는 2PL
Strict Schedule을 보장하는 2PL
Recoverability 보장