한양과학기술고등학교

에듀테크 프로젝트 대시보드

WAL 과 복제

WAL checkpoint streaming replication standby PITR

WAL(Write-Ahead Log)은 '변경을 데이터 파일보다 먼저 기록하는 로그'입니다. 크래시 복구·복제·시점 복구가 모두 여기서 나옵니다.

1. WAL 의 역할

한 줄 요약
  • 내구성 — COMMIT 은 WAL 이 디스크에 안착하면 완료 (데이터 파일은 나중에)
  • 크래시 복구 — 재시작 시 마지막 체크포인트 이후 WAL 을 재생
  • 복제·PITR — 이 WAL 스트림을 standby 로 보내거나 아카이브

체크포인트는 더티 페이지를 데이터 파일에 몰아 씁니다. 너무 잦으면 I/O 폭증 → max_wal_size·checkpoint_timeout 로 조절.

2. 스트리밍 복제

Primary  ──WAL 스트림──▶  Standby (hot standby: 읽기 쿼리 가능)
         replication slot 으로 WAL 유실 방지
# primary: postgresql.conf
wal_level = replica
max_wal_senders = 10

# standby 구축
# pg_basebackup -h primary -D /var/lib/postgresql/16/main -R --slot=s1 -C

3. 동기 vs 비동기

모드특징
비동기 (기본)빠름 · primary 장애 시 마지막 몇 트랜잭션 유실 가능
동기 (synchronous_standby_names)standby 안착까지 COMMIT 대기 · 유실 0 · 지연 ↑
SELECT client_addr, state, sent_lsn, replay_lsn,
       pg_wal_lsn_diff(sent_lsn, replay_lsn) AS 지연바이트
FROM pg_stat_replication;

4. PITR · 논리 복제

PITR — 베이스 백업 + 아카이브된 WAL 로 '어제 14:03' 같은 특정 시점까지 재생 복구. 실수로 DROP TABLE 했을 때의 안전망.

논리 복제(PUBLICATION/SUBSCRIPTION)는 테이블 단위·다른 메이저 버전 간 복제가 가능해 무중단 업그레이드에 씁니다.

"timestamptz 를 써라. 거의 항상."