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

Query Planner 와 통계

~12 min · operations, planner

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

Planner 가 찾을 수 있는 가장 싼 plan 고름

모든 쿼리에 PostgreSQL planner 가 여러 실행 plan 열거 + 추정 비용 가장 낮은 거 고름. 추정이 통계 기반: 각 테이블 행 수, 컬럼별 distinct 값 수, 값 분포. Stale 또는 누락 통계 → 잘못된 추정 → 나쁜 plan.

ANALYZE 가 통계 갱신

Autovacuum 이 주기적으로 ANALYZE 실행. Bulk 로드 또는 큰 데이터 변화 후 수동으로 ANALYZE 실행해서 planner 가 stale 숫자 안 쓰게. 싸고 빠름 — 과하게 하기 드뭄.

상관 컬럼 위한 extended statistics

Planner 가 컬럼이 독립이라 가정 (안 그럴 거 알려주지 않으면). citycountry 가 강한 상관이면 (모든 'Paris' 가 'France' 의미), planner 가 under-estimate. CREATE STATISTICS 가 상관 가르침.

Code

통계 갱신·sql
ANALYZE;                  -- 전체 DB
ANALYZE products;         -- 한 테이블
ANALYZE products (price); -- 한 컬럼
Planner 가 아는 거 검사·sql
SELECT relname, reltuples, relpages
FROM   pg_class
WHERE  relname = 'orders';

SELECT attname, n_distinct, null_frac, most_common_vals
FROM   pg_stats
WHERE  tablename = 'orders'
  AND  attname IN ('status', 'customer_id');
상관 컬럼 위한 extended statistics·sql
CREATE STATISTICS orders_status_customer_stats (dependencies)
ON status, customer_id
FROM orders;
ANALYZE orders;

-- Planner 가 이제 status 와 customer_id 가 독립 아님 앎.

External links

Exercise

실제 DB 에 느린 쿼리 EXPLAIN ANALYZE + 각 노드의 (예상 행) vs (실제 행) 봐. 10× 넘게 차이 나면 관련 테이블에 ANALYZE 실행 + EXPLAIN 재실행. Plan 변화 적어.

Progress

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

댓글 0

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

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