TechBridge

슬로우 쿼리 탐지 — pg_stat_statements · auto_explain 실전

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. pg_stat_statements를 사용하기 위해 postgresql.conf에 반드시 설정해야 하는 것은?
💡 pg_stat_statements는 서버 시작 시 메모리에 로드되어야 합니다. shared_preload_libraries = 'pg_stat_statements'를 설정하고 서버를 재시작한 후, CREATE EXTENSION pg_stat_statements;로 활성화해야 합니다.
Q2. pg_stat_statements에서 mean_exec_time=5ms, calls=200000인 쿼리와 mean_exec_time=2000ms, calls=3인 쿼리 중 DB 전체 부하 관점에서 더 중요한 것은?
💡 DB 전체 부하는 total_exec_time = mean_exec_time × calls로 측정합니다. 5ms × 200,000 = 1,000,000ms(1000초) vs 2000ms × 3 = 6000ms(6초). 5ms 쿼리가 DB 전체에 166배 더 큰 부하를 줍니다. 반드시 두 지표를 함께 봐야 합니다.
Q3. pg_stat_statements가 쿼리를 정규화(normalize)하는 이유는?
💡 쿼리 정규화는 'WHERE id = 1', 'WHERE id = 999' 등을 'WHERE id = $1'로 통일하여 같은 패턴의 쿼리를 하나의 통계로 집계합니다. 이를 통해 애플리케이션에서 자주 실행되는 쿼리 패턴의 전체 통계를 파악할 수 있습니다.
Q4. auto_explain의 주요 역할은?
💡 auto_explain은 auto_explain.log_min_duration에 지정된 시간 이상 소요된 쿼리의 EXPLAIN (ANALYZE) 결과를 자동으로 서버 로그에 기록합니다. DBA가 슬로우 쿼리 발생 시 직접 EXPLAIN을 실행하지 않아도 실행 계획을 사후에 분석할 수 있습니다.
Q5. shared_blks_read가 높고 shared_blks_hit가 낮은 쿼리가 의미하는 것은?
💡 shared_blks_read는 디스크(또는 OS 캐시)에서 읽은 블록 수, shared_blks_hit는 PostgreSQL 공유 버퍼(메모리)에서 읽은 블록 수입니다. read가 높으면 I/O 병목을 나타내며, shared_buffers 증가, 인덱스 추가, 쿼리 최적화를 검토해야 합니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.