Skip to content

[w02][gaeun] 트랜잭션 — STAGE 1 격리 수준 × 이상 현상 매트릭스 (계좌 이체)#8

Draft
gaeunnlee wants to merge 1 commit into
mainfrom
gaeun/w02
Draft

[w02][gaeun] 트랜잭션 — STAGE 1 격리 수준 × 이상 현상 매트릭스 (계좌 이체)#8
gaeunnlee wants to merge 1 commit into
mainfrom
gaeun/w02

Conversation

@gaeunnlee

Copy link
Copy Markdown
Collaborator

도메인

계좌 이체 (account 테이블, id=1, id=2, balance=10000) — Lost Update / 데드락 학습에 강한 도메인.

진행 상황

  • STAGE 1 — DBeaver 두 세션으로 4 격리 수준 × 5 시나리오 매트릭스 (직접 관찰)
  • STAGE 2-1 — 200 스레드 자동 재현 (트랜잭션 손으로)
  • STAGE 2-2 — 헬퍼 추출
  • STAGE 3 — 격리 수준별 측정 (RC/RR/SR × 10/50/100/1000)
  • STAGE 4 — 데드락 직접 만들기 (선택)

STAGE 1 핵심 발견

  1. PG 의 RU = RCREAD UNCOMMITTEDREAD COMMITTED 로 매핑되어 Dirty Read 가 PG 에선 발생 안 함. (공식 문서)
  2. LU-RMW 는 RC 에서 깨짐 — 1 주차 count++ 와 정확히 같은 read-modify-write 구조가 DB row 레이어로 올라옴.
  3. RR (Snapshot Isolation) 은 LU 를 SQLState 40001 로 거부 — DB 가 묵인하지 않고 앱에 책임을 넘김 (재시도 필요).
  4. RR snapshot 은 BEGIN 이 아니라 첫 SELECT/UPDATE 시점에 시작 — 같은 시나리오라도 snapshot 시작 시점이 충돌 범위에 들어가야 40001 발동.
  5. SR 은 단일 row 시나리오에선 RR 과 결과 동일 — write skew 같은 다중 row 케이스에서만 RR 보다 강함.

매트릭스 요약

격리 수준 Dirty Non-repeat Phantom LU-atomic LU-RMW
RU 안 보임 발생 (=RC) 발생 (=RC) 안 보임 (=RC) 발생 (=RC)
RC 안 보임 발생 발생 안 보임 (8000) 발생 (9000, 정답 8000)
RR 안 보임 안 발생 안 발생 막힘 (40001) 막힘 (40001)
SR 안 보임 안 발생 안 발생 막힘 (40001) 막힘 (40001)

전체 메커니즘 노트는 topics/02-transaction/members/gaeun/measurements.md 참고.

다음 차시 (목 11:00 마감)

STAGE 2~3 코드 + 측정 결과를 같은 PR 에 누적 푸시 예정.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant