<aside> 🐘
PostgreSQL 18: 비동기 I/O 도입 → libaio or io_uring
</aside>
PostgreSQL 18에서 Linux의 비동기 I/O 지원을 실험적으로 도입
PostgreSQL 18은 postgresql.conf 파일의 io_method 설정을 통해 세 가지 I/O 방식을 선택
sync (기존 방식): 동기 방식worker (기본값): 백그라운드 워커 프로세스가 비동기적으로 디스크 읽기 수행io_uring: Linux 커널 5.1 이상에서 사용 가능. 워커 없이 커널 수준에서 직접 비동기 읽기디스크 I/O를 요청만 하고, 백엔드는 다른 일 가능하거나 I/O 완료 알림을 기다림
결과가 준비되면 epoll이나 내부 큐로 전달받고 처리
⇒ 동시성 처리량이 확실히 늘고, 다수의 랜덤 읽기, cold cache 상황에서 유리해짐.
| 항목 | PostgreSQL 17 (동기 I/O) | PostgreSQL 18 (비동기 I/O) |
|---|---|---|
| I/O 방식 | read() 블로킹 호출 |
비블로킹 요청 |
| 백엔드 대기 시간 | I/O 완료까지 멍함 | 다른 쿼리 처리하거나 대기 큐 사용 |
| 랜덤 읽기 속도 | 느림 | 개선됨 |
| CPU 자원 활용 | 비효율적 | 병렬 처리 가능성 증가 |
| 높은 동시성 | 병목 발생 | 완화 가능 |