본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

질의 계획기와 통계

~12 min · operations, planner

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

계획은 통계로 비용을 추정해

계획기는 가능한 실행 방법을 비교하고 가장 싸다고 예상한 것을 골라. 행 수, 서로 다른 값의 수, 분포가 틀리면 계획도 틀려.

ANALYZE로 현재 상태를 알려줘

평소에는 autovacuum이 주기적으로 ANALYZE를 실행하지만, 대량 적재나 큰 변경 뒤에는 계획기가 낡은 통계를 쓰지 않도록 직접 ANALYZE를 실행해. 예상 행과 실제 행이 10× 넘게 다르면 색인보다 통계를 먼저 의심해.

열 사이 관계도 가르칠 수 있어

citycountry처럼 강하게 연관된 열은 CREATE STATISTICS의 dependencies로 알려줘 독립 가정의 오류를 줄여.

Code

통계 갱신·sql
ANALYZE;                  -- 전체 DB
ANALYZE products;         -- 한 테이블
ANALYZE products (price); -- 한 컬럼
계획기가 가진 통계 확인하기·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');
상관관계가 있는 열에 확장 통계 만들기·sql
CREATE STATISTICS orders_status_customer_stats (dependencies)
ON status, customer_id
FROM orders;
ANALYZE orders;

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

External links

Exercise

실제 데이터베이스의 느린 질의에 EXPLAIN ANALYZE를 실행해 각 노드의 예상 행 수와 실제 행 수를 비교해. 10배 넘게 차이 나면 관련 테이블에 ANALYZE를 실행한 뒤 EXPLAIN을 다시 실행하고 계획 변화를 적어.

Progress

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

댓글 0

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

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