본문 바로가기
Database2026년 6월 16일2분 읽기

EXPLAIN ANALYZE 읽는 법 — 느린 쿼리 진단

YS
김영삼
조회 1162
EXPLAIN ANALYZE 읽는 법 — 느린 쿼리 진단

핵심 요약

EXPLAIN ANALYZE는 안쪽(들여쓰기 깊은 노드)부터 바깥으로 실행된다. 봐야 할 것은 ① 가장 시간이 큰 노드, ② 추정 rows와 실제 rows의 큰 차이(통계 문제), ③ 큰 테이블의 Seq Scan, ④ 행이 많은데 Nested Loop. 여기서 병목이 드러난다.

1. 핵심 지표

항목의미
actual time실제 소요(시작..끝)
rows(추정 vs 실제)차이 크면 통계 낡음
loops이 노드가 반복된 횟수
Buffers읽은 블록(디스크/캐시)

2. 진단 순서

EXPLAIN (ANALYZE, BUFFERS) <쿼리>;
-- 1) 총시간 큰 노드 찾기
-- 2) rows 추정≪실제 → ANALYZE
-- 3) 큰 Seq Scan → 인덱스 검토
-- 4) Nested Loop × 많은 loops → 조인/인덱스 재설계

3. 함정

  • EXPLAIN(ANALYZE 없이)은 추정만 — 실제 측정은 ANALYZE 필요(쿼리 실제 실행됨, 쓰기 주의)
  • 첫 실행은 캐시 미스로 느릴 수 있다 — 여러 번 측정
  • actual time은 loops당이 아니라 누적 — loops 곱해 해석

자주 묻는 질문

추정 rows와 실제 rows가 많이 다르면요?

옵티마이저가 잘못된 계획을 세우기 쉽습니다. 보통 통계가 낡은 것이니 ANALYZE를 실행하고, 그래도 심하면 통계 타깃을 높이세요.

ANALYZE를 붙이면 위험한가요?

EXPLAIN ANALYZE는 쿼리를 실제로 실행합니다. SELECT는 괜찮지만 UPDATE/DELETE는 데이터가 바뀌니 트랜잭션으로 감싸 롤백하세요.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록