lock 기반 이면 항상나오는 현상이다.
예시

- 일정 시간 뒤에는 OS 가 다시 T1을 진행한다.
그래서 무한히 서로 기다림 → 시스템이 멈춰버림 → DBMS가 처리해줘야된다.
Deadlock handling
1. Timeout-Based Schemes
- 트랜잭션이 락을 기다리는 최대 시간을 주고 최대시간보다 넘으면 롤백한다. (wait times out)
- 구현은 간단하지만 Starvation 발생가능 : 하나가 오래 기다릴 수 있음
- 최대시간 설정의 문제
2. Deadlock prevention protocols
다음과 같은 방법들 중 하나 사용
- graph-based protocol 같은 방법을 이용
- 트랜잭션이 쓸려는 모든 데이터에 대해서 락을 다 잡으면 진행하게 하는 방법
- 모든 데이터에 부분적 순서를 부여해서 graph로 사용
- 모든 데이터를 알 수가 없어서 실제로 사용 X
Wait-die / Wound-wait Schemes
- 대부분의 상용 DBMS에서 사용
- 트랜잭션이 언제 시작되었는지 타임스태프를 관리한다.
- Wait-die
- lock을 요구하는 것이 → old : wait , young : die(rollback)
- Wound-wait
- lock을 요구하는 것이 → old : wound , young : wait
- old가 좀 유리함. → 이걸 롤백시키면 할일이 많을 수 있음
- 중간에 죽어서 다시 시작하면, 원래의 타임스태프로 재시작
3. Deadlock Detection
- wait-for graph G=(V,E)
- E : Ti → Tj
- 싸이클이 있으면 DeadLock