ACTIVE INCIDENT
00:00 elapsed
LABLAB-DB-08-INDEX-TUNINGSEV-2
인덱스 튜닝 — EXPLAIN으로 Seq Scan을 Index Scan으로
ELAPSED
00:00
PHASE
0 / 4
SLA
40분
🗄️ Database← 목록
INCIDENT RESPONSE
0 / 5 단계 완료
📚 PREREQUISITES
Lab
postgresql-slow-queryTheory
database/query-optimizationTheory
database/indexes-basicsTRACK
DATABASE
SLA
40분
SEV
SEV-2
PHASES
3단계
ENV
local
INCOMING TICKET
“슬랙 알람: "상품 목록 API p95 응답이 1.8초까지 치솟았습니다. 트래픽은 평소와 비슷한데 DB만 느려요. 인덱스 좀 봐주실 수 있나요?"”
YOUR ROLE
주니어 인프라 엔지니어
IMPACT IF UNRESOLVED
상품 목록 API 1.8초 — 사용자 이탈 증가, 검색 전환율 하락. 인덱스 없이 Seq Scan으로 100만 행을 매 요청마다 풀스캔 중
🚨INCIDENT BRIEF
상품 목록 API의 p95 응답이 1.8초로 튀었습니다.
"트래픽은 평소랑 비슷한데 DB만 느려요. WHERE category_id = ? AND status = 'active' ORDER BY created_at DESC 이 쿼리가 제일 자주 호출되는데, 인덱스가 제대로 안 잡혀 있는 것 같아요."
EXPLAIN ANALYZE로 이 쿼리의 실행 계획을 읽어 Seq Scan(전체 테이블 스캔)이 일어나는지 확인하고, 어떤 인덱스를 어떤 컬럼 순서로 만들어야 하는지 판단합니다. 인덱스 추가 전후의 비용과 실행시간을 숫자로 비교해 효과를 증명하고, 쓸모없이 디스크만 먹는 인덱스를 찾아 제거합니다.
⏱ 40분📊 중급🔧 3단계#postgresql#index#explain#seq-scan
MISSION
1
EXPLAIN ANALYZE로 느린 쿼리의 실행 계획 읽기
문제 쿼리를 EXPLAIN ANALYZE로 실행해 Seq Scan 여부와 실제 실행시간·스캔 행 수를 확인한다
2
복합 인덱스 설계 — 컬럼 순서가 전부다
WHERE·ORDER BY 패턴에 맞는 복합 인덱스를 만들고 EXPLAIN으로 Index Scan 전환과 실행시간 단축을 확인한다
3
안 쓰이는 인덱스 찾아 제거 + 튜닝 보고서
pg_stat_user_indexes로 스캔 횟수 0인 인덱스를 찾아 제거하고, Before/After 비교를 보고서로 남긴다
📌 선수 지식
ℹ️ 실습 환경
환경: local
필요 도구: bash, postgresql, psql
검증 스크립트:
/labs/lab-db-08-index-tuning/scripts/verify.sh🔒
실습 실행은 Pro 플랜 전용입니다
인시던트 브리프와 학습 자료는 지금 바로 확인할 수 있습니다. 실제 실습 진행 및 터미널 사용은 Pro 플랜에서 가능합니다.
Pro로 업그레이드 →>_ LAB TERMINAL↔ 너비 조절
NOTES