데이터베이스 교착 상태는 여러 트랜잭션이 서로가 가진 잠금의 해제를 기다려 어느 쪽도 진행하지 못하는 상태이다.
원리
순환 대기가 원인이다. 데이터베이스는 교착 상태를 탐지해 관련 트랜잭션 중 하나를 중단시키는 방식으로 진행을 회복할 수 있다.
데이터베이스 내부 |
|---|
WAL · 체크포인트 · MVCC · 트랜잭션 격리 수준 · 읽기 커밋 |
데이터베이스 교착 상태 · 비관적 잠금 · 파티셔닝 · 시점 복구 · 데이터베이스 백업 |
예시
T1이 행 A를 잠그고 B를 기다리며, T2가 B를 잠그고 A를 기다리면 순환이 생긴다.
데이터베이스 | |
|---|---|
관계형 | MySQL · PostgreSQL · MariaDB · SQLite |
NoSQL | |
스토리지 엔진 | |
주의할 점
여러 객체의 잠금을 일정한 순서로 획득하면 위험을 줄일 수 있다. 중단된 트랜잭션은 전체 업무 단위로 안전하게 재시도하며 중복 외부 효과를 주의한다.