본문으로 건너뛰기
default_statistics_target

default_statistics_target

버전기본값context타입
14100userinteger
15100userinteger
16100userinteger
17100userinteger
18100userinteger
19100userinteger

ALTER TABLE ... SET STATISTICS로 컬럼별 목표치를 따로 지정하지 않은 컬럼에 적용되는 기본 통계 목표치를 정한다. 기본값은 100이다.

ANALYZE는 각 컬럼에서 표본을 뽑아 most common values(MCV) 목록과 histogram을 만드는데, 이 값이 그 상세도를 결정한다. 목표치가 100이면 MCV 최대 100개와 histogram 구간 100개를 수집하고, 표본 크기도 목표치에 비례해(목표치 × 300 row) 커진다. 수집된 통계는 pg_statistic 카탈로그에 저장되고 pg_stats 뷰로 확인할 수 있으며, planner는 이를 근거로 조건의 선택도(selectivity)와 결과 row 수를 추정한다. join 방식이나 scan 방식 선택이 전부 이 추정 위에서 이뤄지므로, 통계 품질은 plan 품질과 직결된다.

값을 키우면 ANALYZE 시간이 길어지고 planning 중 통계를 읽는 비용도 조금 늘지만, 값 분포가 치우친 컬럼에서 row 수 추정이 정확해져 plan이 좋아질 수 있다. 설정 가능한 최대값은 10000이다.

운영 노트: 전역값을 무작정 올리기보다, EXPLAIN ANALYZE에서 추정 row 수와 실제 row 수가 크게 어긋나는 컬럼을 찾아 ALTER TABLE ... ALTER COLUMN ... SET STATISTICS로 해당 컬럼만 올리는 편이 좋다. 목표치를 바꾼 뒤에는 ANALYZE를 실행해야 새 통계가 반영된다.

출처: PostgreSQL 18 문서