본문 바로가기
Q&A해결2026년 4월 28일1분 읽기

PostgreSQL 18 설치했는데 io_uring 활성이 안 됩니다 (Ubuntu 24.04)

D
DBA수험생
조회 675댓글 2

PostgreSQL 18을 Ubuntu 24.04 LTS에 설치하고 비동기 I/O 성능을 보려고 io_method = io_uring으로 설정했는데, 시작 시 로그에 "falling back to worker mode"라고 뜹니다.

커널은 6.8이고, io_uring 자체는 strace -e io_uring_setup 같은 도구로 확인하면 다른 프로세스에서는 동작합니다.

# postgresql.conf
io_method = io_uring
shared_buffers = 8GB

왜 fallback 되는지 알 수 있을까요?

댓글 2

김김영삼6개월 전

거의 항상 seccomp 또는 AppArmor가 io_uring 시스템콜을 차단해서 발생합니다. 우분투의 기본 정책이 io_uring을 막고 있어요.


1) AppArmor 확인


sudo aa-status | grep -i postgres
# 보통 /usr/lib/postgresql/18/bin/postgres 가 enforce 모드

2) PG 로그 자세히 보기


sudo tail -100 /var/log/postgresql/postgresql-18-main.log | grep -i "uring\|falling back"
# "io_uring_setup() failed: EPERM" 같은 로그가 보일 것

3) 해결 — 두 가지 방법 중 선택


방법 A: AppArmor 프로필 수정 (권장)


# /etc/apparmor.d/local/usr.lib.postgresql.18.bin.postgres 생성
echo " io_uring," | sudo tee /etc/apparmor.d/local/usr.lib.postgresql.18.bin.postgres
sudo apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.18.bin.postgres
sudo systemctl restart postgresql@18-main

방법 B: io_uring sysctl 설정 (system-wide)


# /etc/sysctl.d/99-iouring.conf
kernel.io_uring_disabled = 0
kernel.io_uring_group = postgres

sudo sysctl -p /etc/sysctl.d/99-iouring.conf

우분투 24.04는 보안상 kernel.io_uring_disabled = 2가 기본값입니다(완전 차단). 이걸 0(허용) 또는 1(group만 허용)으로 바꿔야 합니다.


4) 적용 확인


sudo -u postgres psql -c "SHOW io_method;"
# io_uring 출력되면 성공

# 실제 동작 확인
SELECT * FROM pg_stat_io WHERE backend_type = 'client backend';
# read_avg_time이 sync 대비 30~70% 감소

실측해보고 결과 공유해주시면 좋겠어요. 보통 sequential scan에서 1.5~3배 빨라집니다.

DDBA수험생(guest)6개월 전
방법 A로 해결됐습니다. AppArmor가 원인이었네요. SELECT * FROM pg_stat_io로 확인하니 read 응답시간이 평균 47% 줄었습니다. 감사합니다!
Ctrl+Enter로 등록