본문 바로가기
Database#Database#Transaction조회 2

Deadlock란?교착 상태

정의

두 트랜잭션이 서로 락을 기다리며 영원히 멈추는 상태. DB가 자동 탐지해 한쪽을 abort시킴.

다른 표현데드락교착 상태

Deadlock이란?

트랜잭션 A가 리소스 1을 잡고 2를 기다리는 동안, B가 2를 잡고 1을 기다리는 순환 대기 상태다.

DB의 대응

대부분 DB는 deadlock detector가 주기적으로 대기 그래프를 검사해 한쪽 트랜잭션을 강제 rollback한다.

ERROR: deadlock detected
DETAIL: Process 1234 waits for ShareLock on tuple ...

예방

  • 여러 행을 업데이트할 때 항상 같은 순서로 접근
  • 트랜잭션 시간 최소화
  • SELECT FOR UPDATE SKIP LOCKED로 락 경합 회피
  • log_lock_waits, deadlock_timeout 설정으로 모니터링

🔗 함께 보면 좋은 용어

Database 전체 →