PostgreSQL · 2026-05-13

PostgreSQL 지연 쓰기 원인과 fsync·synchronous_commit 설정

PostgreSQL에서 발생하는 지연 쓰기 현상의 원인과 fsync, synchronous_commit 관련 설정에 따른 영향과 안전한 튜닝 방법을 사례 중심으로 정리한 기술적 설명서

작성일 : 2026-05-13 ㆍ 작성자 : 관리자
post
목차

문제 개요: 지연 쓰기 현상이란

지연 쓰기(write latency)가 느려지면 트랜잭션 응답 시간과 전체 처리량에 영향을 준다. 데이터베이스에서 '지연 쓰기 postgres' 증상은 커밋 대기 시간이 길어지거나 WAL 로그 동기화가 지연될 때 흔히 발생한다. 원인은 디스크 I/O 병목, fsync 호출 지연, 동기 커밋 정책과 체크포인트 동작 등 다양하다.

핵심 설정과 개념

fsync 역할과 영향

fsync는 운영체제 페이지 캐시에 있는 변경 내용을 안정적으로 디스크에 기록하도록 강제하는 호출이다. PostgreSQL에서 fsync가 활성화되면 커밋 시점에 데이터 유실을 방지하지만, I/O 성능이 낮으면 지연이 커진다. 반대로 fsync를 끄면 성능은 올라가지만 전원손실이나 시스템 크래시 시 데이터 손실 위험이 커진다.

synchronous_commit과 성능

synchronous_commit은 트랜잭션 커밋의 동기화 범위를 정의한다. 기본값은 뛰어난 내구성을 제공하나, 동기화 대상이 많아지면 지연이 늘어난다. 아래 주요 옵션과 의미는 다음과 같다.

  • on: WAL이 디스크에 안전하게 기록된 후 커밋 완료.
  • local: 로컬 서버의 WAL만 보장, 복제 노드 대기 생략 가능.
  • off: 트랜잭션이 WAL 플러시를 기다리지 않아 응답속도 개선, 데이터 손실 위험 증가.

진단 절차

문제 해결은 진단에서 시작한다. 아래 순서로 원인을 좁힌다.

  • 서버 로그 확인: fsync 실패, 체크포인트 지연, I/O 관련 경고 탐색.
  • 운영체제 측 I/O 지표: iostat, vmstat로 디스크 응답시간 확인.
  • PostgreSQL 통계: pg_stat_bgwriter와 pg_stat_database에서 checkpoint, buffers_write 활동 점검.
  • 트랜잭션 단위 지연: 느린 쿼리 로그와 pgbadger 같은 도구로 트랜잭션 패턴 분석.

안전한 튜닝 전략

하드웨어와 파일시스템 우선 점검

디스크 성능이 병목인 경우 설정만으로 해결하기 어렵다. SSD, NVMe, RAID 컨트롤러의 배터리 백업 유무(BBU) 확인이 중요하다. 배터리 백업이 있는 쓰기 캐시는 안전한 디스크 동기화를 효율화한다.

fsync와 wal_sync_method 설정

fsync를 끄는 것은 마지막 수단이다. 대신 wal_sync_method를 적절히 선택해 성능을 개선할 수 있다. Linux 환경에서는 fdatasync, fdatasync를 사용하는 플랫폼에서 성능 차이가 발생하니 문서와 하드웨어 특성을 참고한다.

synchronous_commit 튜닝

전체적인 지연을 줄이려면 애플리케이션 요구에 따라 동기화 수준을 조정한다. 예를 들어, 복제 지연을 허용할 수 있는 읽기 위주의 작업에서는 synchronous_commit을 'local'로 설정하면 복제 지연 대기 시간을 줄일 수 있다. 단, 이 경우에도 장애 시 데이터 유실 가능성을 고려해야 한다.

추가 설정으로 완화

  • checkpoint_timeout 및 checkpoint_completion_target 조정으로 체크포인트 집중을 완화.
  • commit_delay와 commit_siblings 설정으로 동시 커밋 그룹을 만들면 디스크 I/O를 묶어 효율을 높일 수 있음.
  • unlogged 테이블 사용은 데이터 유실을 허용할 때만 고려.

실제 설정 예시

아래는 postgresql.conf와 트랜잭션 레벨 예시다. 환경에 따라 신중히 적용한다.

fsync = on
wal_sync_method = 'fdatasync'
checkpoint_timeout = 10min
checkpoint_completion_target = 0.7
commit_delay = 10000    # 마이크로초 단위
commit_siblings = 5
-- 세션 단위로 동기화 수준 변경
SET local synchronous_commit = 'local';
-- 또는 애플리케이션 단위로 off 사용 검토
SET local synchronous_commit = 'off';

운영상 권고와 주의사항

설정 변경 전 테스트 환경에서 충분히 검증한다. fsync와 synchronous_commit 관련 설정 변경은 데이터 손실 위험과 직접 연관되므로 백업·복제 전략과 함께 설계해야 한다. 또한, 모니터링을 통해 변경 영향(지연, 재시작 후 복구 시간 등)을 지속적으로 확인한다.

요약

지연 쓰기 문제는 단일 원인보다 복합적이다. 우선 하드웨어와 I/O 병목을 확인하고, fsync 관련 정책과 synchronous_commit을 애플리케이션 요구에 맞춰 조정한다. 안전과 성능의 균형을 고려해 단계적으로 튜닝하면 지연 쓰기 postgres 해결에 실질적인 도움이 된다.

fsync postgres 설정 영향 synchronous_commit 튜닝 postgres 지연 쓰기 postgres 해결 PostgreSQL 성능 wal_sync_method checkpoint 튜닝 commit_delay 데이터베이스 안정성