Query Optimization

쿼리 실행 비용을 줄이고 성능을 높이기 위한 계획 수립과 라우팅 기법


핵심 개념

쿼리 옵티마이저는 SQL 쿼리의 실행 계획을 생성하고, 가장 효율적인 경로를 선택한다. 정확한 통계 정보가 핵심이며, 대규모 환경에서는 쿼리 라우팅과 워크로드 격리도 중요한 최적화 축이다.

Portable Statistics (PostgreSQL 18)

프로덕션 데이터 없이 정확한 쿼리 플랜을 생성하는 새로운 접근:

  • PostgreSQL 18에서 테이블 통계를 내보내고(export) 다른 환경에서 불러올(import) 수 있는 기능 추가
  • CI 파이프라인에서 프로덕션 통계를 로드하여 비용이 높은 쿼리를 사전 감지
  • 개발 환경에서도 프로덕션과 동일한 쿼리 플랜을 생성 가능
  • SQL 실행 라우팅 엔진의 기반 기술로 활용 가능

Trino Gateway — 쿼리 라우팅

Expedia의 대규모 Trino 운영 사례:

  • Lyft의 Presto Gateway를 포크한 단일 엔드포인트 프록시
  • 분석, ETL, BI 쿼리를 전용 클러스터로 라우팅
  • 설정 가능한 규칙 기반 라우팅 (테이블 크기, 쿼리 유형, 소스 도구별)
  • Noisy-neighbor 장애 방지, 무중단 배포, 실시간 클러스터 헬스 가시성

PostgreSQL 인덱싱 전략

PostgreSQL의 6가지 인덱스 유형은 워크로드에 따라 극적인 성능 차이를 만든다:

인덱스 유형적합한 워크로드특성
B-Tree범용 (기본값)O(log n), 100만 행에 20회 비교
Hash등가 비교만B-Tree보다 컴팩트
BRIN시계열/append-only극도로 작은 크기, 업데이트 테이블에 부적합
GIN배열, JSONB, 전문 검색다중 값 인덱싱에 최적
GiST공간 데이터, 범위 쿼리R-tree 기반
Partial조건부 서브셋크기↓ 유지보수↓ 성능↑ 동시 달성

핵심 수치: 인덱스 없이 100만 행 쿼리 265ms/6,369 페이지 → 인덱스 적용 후 0.077ms/4 페이지. 단, 테이블의 15-20% 이상을 반환하는 쿼리에는 무효.

PostgreSQL 18의 Skip Scan으로 복합 인덱스의 선행 컬럼 없이도 최적화 가능.

트레이드오프

접근법장점비용
Portable StatisticsCI에서 쿼리 플랜 검증, 프로덕션 데이터 불필요PostgreSQL 18+ 필요, 통계 동기화 운영
쿼리 라우팅 (Gateway)워크로드 격리, 무중단 배포프록시 레이어 복잡도, 라우팅 규칙 관리
DuckDB 트랜스파일링개발 비용 극감대용량 테이블 풀링 병목

연관 개념


Source: Production Query Plans Without Production Data, Operating Trino at Scale With Trino Gateway, Introduction to PostgreSQL Indexes