PostgreSQL · 2026-01-17

PostgreSQL 파티션 프루닝으로 성능 개선

PostgreSQL 파티션 프루닝의 개념과 설정, 쿼리 검증 절차 및 인덱스·파티션 설계 관점에서 postgres partition 성능 개선을 설명한 기술해설

작성일 : 2026-01-17 ㆍ 작성자 : 관리자
post
목차

왜 파티션 프루닝이 중요한가

데이터가 커지면 단일 테이블에서 전체 스캔 비용이 커진다. 파티션을 쓰면 데이터를 분할해 관리할 수 있다. 그러나 단순 분할만으로는 충분하지 않다. 파티션 프루닝(partition pruning)이 있어야 쿼리가 실제로 필요한 파티션만 읽는다. partition pruning postgres 는 대용량 환경에서 쿼리 응답 시간을 줄이는 핵심 기술이다.

파티션 프루닝의 기본 개념

계획 시 프루닝과 실행 시 프루닝

파티션 프루닝은 크게 두 가지 시점에서 일어난다. 하나는 planner 단계에서 상수 조건으로 미리 어떤 파티션을 제외하는 방식이고, 다른 하나는 파라미터 값이 실행 시점에 결정될 때 가능한 파티션만 선택하는 방식이다. 이 두 경우 모두 쿼리 계획이 읽을 파티션 수를 줄여 IO와 CPU를 절감한다.

파티션 키와 쿼리의 일치

프루닝이 잘 동작하려면 WHERE 절에 파티션 키를 명시하거나 파티션 키와 직접 연관된 표현식을 사용해야 한다. 즉 파티션 컬럼을 포함한 조건이 쿼리에 포함되어야 planner가 제외 대상을 판단한다. 자주 사용하는 조회 조건을 기준으로 파티션 키를 설계하면 성능 개선 효과가 뚜렷하다.

설계와 설정 관점

파티션 방식 선택

주로 사용하는 방식은 range와 list이다. 시간 기반 조회가 많으면 range 파티션이 적절하다. 카테고리별 검색이 많으면 list 파티션이 유리하다. 선택은 쿼리 패턴을 우선으로 결정한다.

파티션 수와 크기 균형

너무 많은 파티션은 오히려 planner 비용을 높인다. 반대로 파티션이 너무 크면 IO 이점이 줄어든다. 일반적으로 각 파티션의 크기와 조회 패턴을 고려해 수십에서 수백 단위의 파티션을 권장하지만, 운영 환경과 하드웨어에 따라 적절히 조정한다.

인덱스와 파티션

파티션된 테이블에서는 각 파티션에 인덱스를 생성한다. 글로벌 인덱스는 기본적으로 지원되지 않으므로 파티션별 인덱스 전략이 필요하다. 파티션 키에 맞춘 복합 인덱스를 고려하면 파티션 프루닝과 인덱스 스캔이 동시에 이득을 준다.

파티션 프루닝 설정 postgres 관련 체크리스트

  • 선택한 파티션 방식(range/list)이 쿼리 패턴과 부합하는지 확인
  • WHERE 절에 파티션 키를 포함하는지 확인
  • 파티션 수가 지나치게 많은지 여부 점검
  • 파티션별 인덱스와 통계가 적절히 수집되었는지 확인
  • EXPLAIN으로 실제 스캔 대상 파티션을 검증

실습 예제: 시간 기반 range 파티션 생성과 검증

아래 예제는 월 단위 range 파티션을 만드는 기본 흐름이다. 파티션 키는 created_at을 사용한다.

CREATE TABLE events (
  id serial PRIMARY KEY,
  created_at timestamp NOT NULL,
  user_id int,
  payload jsonb
) PARTITION BY RANGE (created_at);

CREATE TABLE events_2025_01 PARTITION OF events
  FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');

CREATE TABLE events_2025_02 PARTITION OF events
  FOR VALUES FROM ('2025-02-01') TO ('2025-03-01');

이제 특정 날짜 범위로 쿼리했을 때 프루닝이 적용되는지 확인한다.

EXPLAIN ANALYZE
SELECT * FROM events
WHERE created_at >= '2025-02-10'::timestamp
  AND created_at < '2025-02-11'::timestamp;

EXPLAIN 결과에서 planner가 실제로 events_2025_02만 스캔하는지 확인하면 된다. 이 검증은 partition pruning postgres 동작 여부를 직접 확인하는 가장 확실한 방법이다.

쿼리 작성 시 고려사항

  • 파티션 키를 포함한 WHERE 절을 우선적으로 작성
  • 복잡한 함수 적용이나 타입 변환은 프루닝을 방해할 수 있음
  • 서브쿼리나 뷰를 통해 파티션 키가 숨겨지면 planner가 인식하지 못할 수 있음

운영에서의 성능 개선 사례

정기 수집 로그처럼 시간 조회가 대부분인 테이블에서 partition pruning을 적용한 뒤 쿼리 응답 시간이 크게 줄었다는 사례가 많다. 핵심은 파티션 설계와 쿼리 패턴 일치이다. 또한 적절한 인덱스와 최신 통계를 유지하면 planner가 더 정확한 비용 추정으로 올바른 계획을 세운다. postgres partition 성능 개선은 설계와 운영의 조합으로 달성된다.

추가 점검 포인트

  • ANALYZE로 통계 최신화
  • VACUUM 주기 조정으로 테이블 상태 관리
  • 파티션 병합 또는 재분할을 통한 균형 유지
  • 대형 파티션에 대한 백업/복원 전략 수립

맺음말

파티션 프루닝은 단순한 분할을 넘어 쿼리 성능을 좌우하는 요소다. 파티션 키 설계, 쿼리 작성 습관, 인덱스와 통계 관리를 종합적으로 고려하면 partition pruning postgres 기능을 통해 실질적인 성능 향상을 기대할 수 있다. 파티션 프루닝 설정 postgres 관련 점검은 운영 전후 모두 중요한 절차다.

partition pruning postgres 파티션 프루닝 설정 postgres postgres partition 성능 개선 postgresql 파티셔닝 파티션 인덱스 EXPLAIN 분석 파티션 설계 range partition