DB Lock Manager 시뮬레이터

실제 Lock 호환성 검사 · Wait Queue · Wait-for Graph · Deadlock 감지 · MVCC

Database State ts=0
idnamecommitteduncommittedlocks
Lock Manager
Held Locks
없음
Wait Queue
없음
Wait-for Graph
대기 없음 T1 T2 ⚠ DEADLOCK
T1 — Transaction 1 idle
제어
읽기 (SELECT)
쓰기 (UPDATE)
snapshot_ts: —  |  status: idle
T2 — Transaction 2 idle
제어
읽기 (SELECT)
쓰기 (UPDATE)
snapshot_ts: —  |  status: idle
실행 로그
시뮬레이션 테스트 시나리오
Deadlock
교착 상태 (Deadlock)
  • T1 BEGIN
  • T2 BEGIN
  • T1 WRITE row1=999 → X Lock 획득
  • T2 WRITE row2=222 → X Lock 획득
  • T1 WRITE row2=999 → T2 X Lock 대기 (BLOCKED)
  • T2 WRITE row1=111 → T1 X Lock 대기
  • 🔴 DEADLOCK 감지 → T2 강제 중단
  • ✓ T1 UNBLOCKED, 재개 가능
Dirty Read
더티 리드 재현
  • 격리 수준: Read Uncommitted으로 변경
  • T1 BEGIN
  • T2 BEGIN
  • T2 WRITE row1=999 (미커밋)
  • T1 READ row1 → uncommitted 999 읽음
  • T2 ROLLBACK
  • ⚠ T1이 읽은 999는 존재하지 않음
  • ✓ Read Committed이면 100 읽음
Non-repeatable
반복 불가능한 읽기
  • 격리 수준: Read Committed
  • T1 BEGIN
  • T1 READ row1 → 100
  • T2 BEGINWRITE row1=999COMMIT
  • T1 READ row1 → 999 (값 변경됨)
  • ⚠ 같은 쿼리인데 결과가 달라짐
  • ✓ Repeatable Read이면 100 유지
Lock Upgrade
S → X Lock 업그레이드
  • 격리 수준: Repeatable Read
  • T1 BEGINREAD row1 → S Lock
  • T2 BEGINREAD row1 → S Lock (호환)
  • T1 WRITE row1=999 → X Lock 업그레이드 시도
  • ⏸ T2가 S Lock 보유 → T1 BLOCKED
  • T2 COMMIT
  • ✓ T2 해제 → T1 X Lock 획득 가능