C.W.K.
Stream
Lesson 09 of 10 · published

EXPLAIN 과 EXPLAIN ANALYZE

~14 min · apps, performance

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

가장 중요한 단일 디버깅 도구

EXPLAIN 이 쿼리 실행 안 하고 planner 의 선택된 실행 plan 보여줌. EXPLAIN ANALYZE 가 쿼리 실행 + 실제 시간, 행 카운트, buffer 사용 보고. 함께: "이 쿼리 왜 느리고, DB 가 어떻게 동작할 거라 생각하나?"

찾을 거

  • 큰 테이블에 Seq Scan = 잠재 누락 인덱스.
  • 예상 행 vs 실제 행 크게 다름 = stale 통계; ANALYZE 실행.
  • 단일 노드의 높은 비용 = 시간이 가는 곳; 거기 집중.
  • Buffers: shared read=... = 디스크에 감; 캐시 워밍 또는 working set 줄이기 고려.
  • Nested Loop 의 Loops > 1 = 위장한 N+1; 가끔 hash join 이 훨씬 빠름.

auto_explain extension

duration 임계값 (예: 1 초) 으로 auto_explain 켜기. 모든 느린 쿼리가 자동 EXPLAIN ANALYZE 로깅. 모든 쿼리 수동 실행 안 하고 느린 쿼리 찾는 방법.

Code

중요한 옵션의 EXPLAIN·sql
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, FORMAT TEXT)
SELECT u.name, COUNT(o.id) AS orders
FROM   users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE  u.created_at >= now() - INTERVAL '90 days'
GROUP  BY u.name
HAVING COUNT(o.id) >= 3
ORDER  BY orders DESC
LIMIT  10;
auto_explain — 느린 쿼리 자동 로깅·sql
-- postgresql.conf 또는 SET (세션별)
LOAD 'auto_explain';
SET auto_explain.log_min_duration = '1s';
SET auto_explain.log_analyze = on;
SET auto_explain.log_buffers = on;

-- 이제 1s+ 쿼리가 EXPLAIN ANALYZE 로깅.
depesz 또는 pgMustard 로 plan 시각화·text
# EXPLAIN 출력을 paste:
# - https://explain.depesz.com/
# - https://www.pgmustard.com/
# 둘 다 비싼 노드 색깔로 highlight + 무슨 일인지 설명.

External links

Exercise

프로젝트의 가장 느린 쿼리 잡기. EXPLAIN (ANALYZE, BUFFERS) 실행. 출력을 explain.depesz.com 에 paste. 가장 비싼 노드 식별. 한 최적화 (인덱스, 쿼리 재작성, 통계) 시도 + 재측정.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.