본문으로 건너뛰기

fsync

버전기본값context타입
14sighupboolean
15sighupboolean
16sighupboolean
17sighupboolean
18sighupboolean
19sighupboolean

서버가 변경 내용을 디스크에 물리적으로 기록했는지 fsync() 시스템 콜(또는 wal_sync_method가 정하는 동등한 방법)로 확인할지를 정한다. boolean 파라미터로 기본값은 on이며, postgresql.conf나 서버 커맨드라인에서만 설정할 수 있다.

on이면 OS나 하드웨어 crash 후에도 데이터베이스 클러스터가 일관된 상태로 recovery될 수 있음이 보장된다. 끄면 성능이 좋아지는 경우가 많지만, 전원 장애나 시스템 crash 시 복구 불가능한 데이터 손상으로 이어질 수 있다. 따라서 외부 데이터로 데이터베이스 전체를 쉽게 다시 만들 수 있는 경우에만 끄는 것이 허용된다. 백업 파일로 새 클러스터를 처음 적재할 때, 처리 후 버리고 다시 만들 배치용 클러스터, 자주 재생성되고 failover에 쓰이지 않는 read-only clone 정도가 그 예다. 고품질 하드웨어를 쓴다는 것만으로는 fsync를 끌 근거가 되지 않는다.

off에서 on으로 되돌릴 때는 커널에 남아 있는 수정된 buffer를 모두 내구 스토리지로 내려야 신뢰할 수 있는 recovery가 가능하다. 클러스터를 내린 상태 또는 fsync가 켜진 상태에서 initdb --sync-only 실행, sync 실행, 파일시스템 unmount, 서버 재부팅 중 하나로 처리한다.

운영 노트: 성능이 목적이라면 fsync를 끄는 대신 중요하지 않은 트랜잭션에 한해 synchronous_commit을 끄는 편이 낫다. 데이터 손상 위험 없이 fsync off가 주는 성능 이득의 상당 부분을 얻을 수 있다. fsync를 끄기로 했다면 full_page_writes도 함께 끌지 검토한다.

출처: PostgreSQL 18 문서