1. 데드락 (교착 상태)
데드락.
여러 Transaction이 서로가 보유한 자원의 Lock 해제를 기다리며 무한 대기 상태에 빠지는 현상.
데이터베이스에서는 Transaction이 데이터 변경 시 Lock을 사용하여 데이터 무결성을 보장하는 구조.
이 과정에서 서로의 자원을 기다리는 순환 대기 상태(Circular Wait) 발생 가능.
이러한 상황을 데드락(교착 상태)이라고 함.
2. 데드락 발생 상황
두 Transaction이 서로 다른 자원을 점유한 상태에서 상대방 자원을 기다리는 상황.
예시 흐름
- Transaction A → 데이터 X Lock 획득
- Transaction B → 데이터 Y Lock 획득
- Transaction A → Y 접근 대기
- Transaction B → X 접근 대기
두 Transaction 모두 상대방 Lock 해제를 기다리게 되면서
작업이 영원히 진행되지 않는 상태 발생.
3. 데드락 해결 방법
데드락 해결 방식은 크게 세 가지 방식 존재.
예방 (Prevention)
데드락 발생 조건을 사전에 제거하는 방식.
방법
- Transaction 시작 전 필요한 자원 미리 Lock
- Lock 획득 순서 일관성 유지
단점
- 시스템 병행성(Concurrency) 감소
회피 (Avoidance)
자원 할당 시 데드락 발생 가능성을 판단하여 회피하는 방식.
대표적인 방법
- Timestamp 기반 기법
- Banker’s Algorithm
특징
- 데드락 가능성 존재 시 자원 할당 거부
탐지 및 회복 (Detection & Recovery)
데드락 발생을 허용한 후 발생 여부를 감지하고 해결하는 방식.
동작 과정
- 데드락 발생 여부 탐지
- 데드락 발견 시 Transaction 하나 Rollback
- Lock 해제 후 다른 Transaction 진행
대부분의 DBMS에서 사용하는 방식.
4. 데드락 발생 조건
Deadlock은 다음 네 가지 조건이 동시에 만족할 때 발생.
| 조건 | 설명 |
|---|---|
| Mutual Exclusion | 자원을 동시에 하나의 Transaction만 사용 |
| Hold and Wait | 자원을 점유한 상태에서 다른 자원 대기 |
| No Preemption | 자원을 강제로 회수할 수 없음 |
| Circular Wait | Transaction 간 순환 대기 발생 |
핵심 정리
데드락
- Transaction 간 Lock 충돌로 인해 서로 자원을 기다리는 상태
- 순환 대기(Circular Wait) 상황에서 발생
해결 방법
- 예방 (Prevention)
- 회피 (Avoidance)
- 탐지 및 회복 (Detection & Recovery)