피드로 돌아가기
How Postgres Writes Data: WAL, Shared Buffers, and the Illusion of Speed
Dev.toDev.to
Database

Sequential I/O와 RAM 캐싱을 통한 Postgres 쓰기 성능 극대화 전략

How Postgres Writes Data: WAL, Shared Buffers, and the Illusion of Speed

Vipul Gaikwad2026년 6월 28일7intermediate

Context

물리 디스크의 Random Write 특성으로 인한 데이터 업데이트 지연과 고부하 트래픽 상황의 성능 저하 문제 발생. 데이터 무결성 보장과 빠른 응답 속도라는 상충하는 목표를 동시에 달성해야 하는 엔지니어링 패러독스 해결 필요.

Technical Solution

  • Shared Buffers를 통한 8KB Page 단위의 RAM 캐싱으로 디스크 I/O 최소화 및 나노초 단위 응답 속도 구현
  • Write-Ahead Log(WAL) 도입을 통한 Random I/O의 Sequential I/O 전환으로 디스크 쓰기 병목 지점 제거
  • WAL Writer가 트랜잭션을 디스크에 먼저 기록한 후 성공 응답을 반환하는 구조로 데이터 Durability 확보
  • Checkpointer 프로세스를 활용하여 Dirty Page를 주기적으로 Batch Flush 함으로써 실제 테이블 파일 업데이트 부하 분산
  • OS Process 기반 격리 구조의 Context-switching 오버헤드 해결을 위해 PgBouncer를 통한 Connection Pooling 아키텍처 적용

1. 쓰기 성능 최적화를 위해 Random I/O를 Sequential I/O로 변환하는 로그 기반 구조 검토

2. 무거운 프로세스 모델 사용 시 CPU 부하 방지를 위해 비동기 이벤트 루프 기반의 Proxy 레이어 배치

3. 메모리 내 변경 사항의 영속성 보장을 위한 WAL-Checkpointer 메커니즘의 주기 및 임계치 설정 최적화

원문 읽기