ACTIVE INCIDENT
00:00 elapsed
LABLAB-DB-06-LOCK-DEADLOCKSEV-2
PostgreSQL Lock·Deadlock — pg_stat_activity 진단
ELAPSED
00:00
PHASE
0 / 5
SLA
40분
🗄️ Database
← 목록
INCIDENT RESPONSE
0 / 6 단계 완료
📚 PREREQUISITES
Labpostgresql-slow-query
Theorydatabase/query-optimization
Theorydatabase/transactions
TRACK
DATABASE
SLA
40분
SEV
SEV-2
PHASES
4단계
ENV
local
INCOMING TICKET
슬랙 알람: "결제 API 30초 타임아웃 발생 중. DB 락 대기 의심. 빠른 확인 부탁드립니다."
YOUR ROLE
주니어 인프라 엔지니어
IMPACT IF UNRESOLVED
결제 API 타임아웃 — 사용자 결제 실패, 매출 직결 장애. 원인 파악 없이 재시작 시 반복 발생
🚨INCIDENT BRIEF
슬랙에서 알람이 왔습니다.
"결제 API가 30초 타임아웃으로 계속 실패해요. DB 연결 쪽 문제 같은데, 락 대기가 쌓이고 있는 것 아닌가요?"
pg_stat_activity로 현재 DB 세션 상태를 확인하고, 락을 보유한 세션과 대기 중인 세션의 관계를 시각화합니다. 데드락을 직접 재현해 pg_log에서 원인을 확인하고 해결책을 적용합니다.
⏱ 40분📊 중급🔧 4단계#postgresql#lock#deadlock#pg_stat_activity
MISSION
1
현재 락 대기 세션 확인
pg_stat_activity에서 wait_event_type = Lock 인 세션을 찾아 어떤 세션이 대기 중인지 파악한다
2
락 보유/대기 관계 시각화 — pg_locks 조인
pg_locks와 pg_stat_activity를 조인해 어떤 세션이 락을 보유하고 어떤 세션이 대기 중인지 관계를 파악한다
3
데드락 재현 — 두 세션 역순 UPDATE
두 세션에서 역순으로 행을 UPDATE해 데드락을 의도적으로 발생시키고 pg_log에서 확인한다
4
데드락 해결 — 블로킹 세션 종료 + 예방 전략
pg_terminate_backend으로 블로킹 세션을 종료하고, 데드락 예방을 위한 코드 수정 방향을 이해한다
📌 선수 지식
• [실습] postgresql-slow-query
• [이론] database/query-optimization
• [이론] database/transactions
ℹ️ 실습 환경
환경: local
필요 도구: bash, postgresql, psql
검증 스크립트: /labs/lab-db-06-lock-deadlock/scripts/verify.sh
🔒
실습 실행은 Pro 플랜 전용입니다
인시던트 브리프와 학습 자료는 지금 바로 확인할 수 있습니다. 실제 실습 진행 및 터미널 사용은 Pro 플랜에서 가능합니다.
Pro로 업그레이드 →
>_ LAB TERMINAL↔ 너비 조절
NOTES