핵심 요약
- Postgres 18에 새롭게 도입된 I/O 옵션(worker, io_uring)과 이전 버전인 17의 읽기 성능을 비교한 대규모 벤치마크가 진행되었습니다.
- 큰 기대를 모았던 io_uring이 네트워크 스토리지 환경에서는 지연 시간 탓에 오히려 기존 방식보다 느리게 측정되는 의외의 결과가 나왔습니다.
- 로컬 NVMe 드라이브 환경에서는 병목 없이 뛰어난 성능 향상을 보여 스토리지 특성에 따른 차이가 큼이 확인되었습니다.
요약 데이터베이스 플랫폼 플래닛스케일(PlanetScale)에서 최근 출시된 PostgreSQL 18과 이전 버전인 17의 읽기 I/O 성능을 심층 비교한 벤치마크 결과를 공개했습니다. 이번 포스트그레스 18의 핵심 변경 사항 중 하나는 디스크 I/O 처리 방식을 제어하는 `io_method` 옵션의 추가로, 기존 동기식(sync) 외에도 전용 백그라운드 워커를 사용하는 `worker`(새 기본값)와 리눅스 비동기 I/O 인터페이스를 활용하는 `io_uring` 방식이 도입되었습니다. 특히 io_uring은 디스크 읽기를 비동기로 처리해 성능을 대폭 끌어올릴 것으로 개발자들의 큰 기대를 모았습니다.
테스트는 sysbench의 읽기 전용 벤치마크(`oltp_read_only`)를 통해 진행되었으며, 메모리(64GB)보다 훨씬 큰 300GB 규모의 데이터베이스를 구성해 디스크 I/O 부하를 극대화했습니다. AWS EC2의 네트워크 스토리지(EBS gp3, io2)와 로컬 초고속 NVMe 드라이브 환경 등 총 4개 인스턴스에서 동시 연결 수와 스캔 범위(range_size)를 바꿔가며 총 96가지 조합의 테스트를 수행했습니다.
단일 연결 기준 테스트에서는 예상 밖의 결과가 나왔습니다. 네트워크 스토리지 환경에서는 큰 기대를 모았던 `io_uring`보다 오히려 기본 `worker`나 기존 `sync` 방식이 더 나은 성능(QPS)을 보였는데, 이는 네트워크 볼륨 자체의 지연 시간(latency)이 영향을 미친 것으로 분석되었습니다. 반면 지연 시간이 극도로 낮은 로컬 NVMe 환경에서는 모든 모드가 고르게 뛰어난 성능을 보였습니다. 또한 50개 연결의 고부하 병렬 읽기 환경에서는 네트워크 볼륨의 경우 IOPS와 처리량 한계로 인한 병목이 두드러진 반면, 로컬 디스크 환경에서 Postgres 18의 성능 향상이 확연히 체감되었습니다.
Sponsored · 광고