io_method
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 18 | worker | postmaster (재시작) | enum |
| 19 | worker | postmaster (재시작) | enum |
asynchronous I/O를 실행하는 방식을 선택한다. PostgreSQL 18에서 asynchronous I/O(AIO) 서브시스템이 도입되면서 새로 생긴 핵심 파라미터로, 서버 시작 시에만 설정할 수 있다.
가능한 값은 세 가지다. worker(기본값)는 별도의 I/O worker process들이 backend를 대신해 비동기 I/O를 수행한다. io_uring은 Linux의 io_uring 인터페이스로 각 process가 직접 비동기 I/O를 발행하며, --with-liburing(meson은 -Dliburing) 옵션으로 빌드된 서버에서만 쓸 수 있다. sync는 비동기 대상이 될 I/O를 기존처럼 동기적으로 실행하는 방식으로, 18 이전 버전의 동작에 가장 가깝다.
18 이전의 PostgreSQL은 읽기가 필요한 시점에 블록 단위 동기 read를 실행하고 그동안 process가 기다리는 구조였다. AIO는 읽기를 미리 발행해 두고 계산과 I/O를 겹치게 만들어, sequential scan이나 vacuum처럼 대량의 블록을 훑는 작업의 I/O stall을 줄인다. worker 방식이 어느 플랫폼에서나 동작하는 기본 구현이고, io_uring은 지원되는 Linux 환경에서 process 간 핸드오프 없이 더 낮은 오버헤드를 노릴 수 있는 선택지다.
운영 노트: 18로 업그레이드한 직후 I/O 동작 차이가 의심될 때는
sync로 되돌려 비교해 보면 AIO 영향 여부를 분리할 수 있다. worker를 쓸 때는 I/O worker 수를 정하는 io_workers가 실질적인 처리량을 좌우하므로 함께 검토한다. io_uring은 kernel 버전과 빌드 옵션, 컨테이너 환경의 seccomp 정책 등에 따라 가용 여부가 달라질 수 있다.출처: PostgreSQL 18 문서