본문 바로가기
DB2026년 5월 23일3분 읽기

PostgreSQL 18 Beta — skip scan + io_uring 실측 6배

YS
김영삼
조회 220
PostgreSQL 18 Beta — skip scan + io_uring 실측 6배

핵심 요약

PG18 Beta의 두 가지 변화 — multi-column index skip scan과 io_uring 기반 async I/O. 12억 row 주문 테이블 실측 4개 쿼리 6.2배, 인덱스 추가 없이도 즉시 효과. 단 io_uring은 커널 6.6+ 필수, RDS는 25년 Q4 예정.

1. Skip Scan — leading column 없이도 인덱스 사용

기존 PG는 idx(a, b, c) 인덱스에서 WHERE b=? 만으로는 seq scan. 18에서는 a의 distinct 값이 작으면 skip scan으로 인덱스 사용. distinct(a) < 200 정도까지 효과적.

CREATE INDEX ON orders(status, created_at, user_id);
-- PG17: seq scan
-- PG18: index skip scan, 4.1초 → 0.6초
EXPLAIN ANALYZE
SELECT * FROM orders WHERE created_at > now() - interval '7 days';

2. io_uring — read 병렬화

effective_io_concurrency 설정만으로 비동기 prefetch. bitmap heap scan, parallel seq scan에서 특히 효과. NVMe SSD에서 6배, 사내 ECMP 망 EBS에서 2.3배.

-- postgresql.conf
io_method = 'io_uring'         # 또는 'worker', 'sync'
effective_io_concurrency = 256
maintenance_io_concurrency = 64

3. 실측 4개 쿼리

쿼리PG17PG18배수
range scan 7일치4.1s0.6s6.8x
ANALYZE 1.2억 row28m9m3.1x
VACUUM full52m19m2.7x
복합 JOIN12.4s2.8s4.4x

4. 함정

  • io_uring 커널 요구 — 6.6 미만이면 fallback to worker, 무음으로 느려짐
  • skip scan은 distinct 많으면 역효과 — leading column에 1만+ 값이면 그냥 인덱스 분리
  • Replication 호환 — 17 standby로 스트리밍 불가, 마이그레이션 동시 진행
  • extension 호환 — pg_partman, TimescaleDB 18 지원은 6월 예정

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록