[PostgreSQL] WAL(Write-Ahead Logging) 로그 관리 가이드

2025. 2. 17. 00:30·개발 (Development)/PostgreSQL

PostgreSQL WAL(Write-Ahead Logging) 로그 관리 가이드

PostgreSQL의 WAL(Write-Ahead Logging) 로그가 가득 차지 않도록 유지하려면 몇 가지 설정을 조정해야 합니다. 특히, 자동 체크포인트 설정, WAL 보존 주기 설정, 아카이빙 정책 등을 관리하면 WAL 크기를 제어할 수 있습니다. 해당 기능을 찾아보게 된 이유는 업무 중 AWS에 서비스 배포 및 이관 시 WAL 로그가 저장되는 PV(Persistent Volume) 의 크기에 제약이 있어, 해당 Pod 가 중지되는 현상이 발생했습니다. 따라서 해결 방법을 찾아 기록하기 위해 이 글을 남깁니다.

1. WAL 로그 크기 관리 기본 설정

WAL 파일이 너무 많이 쌓이지 않도록 하려면, 다음 설정들을 postgresql.conf에서 조정하면 됩니다.

(1) max_wal_size 및 min_wal_size 조정

이 두 설정은 WAL 파일이 차지하는 최대 및 최소 크기를 제어합니다.

  • max_wal_size: WAL이 이 크기를 초과하면 체크포인트가 트리거됩니다.
  • min_wal_size: 이 크기보다 작은 WAL 파일은 삭제됩니다.

예시 (기본값보다 작은 크기로 설정):

min_wal_size = 1GB  # 최소 WAL 크기 (기본값: 80MB)
max_wal_size = 2GB  # 최대 WAL 크기 (기본값: 1GB)
  • 값이 작으면 WAL이 빠르게 삭제되지만, 성능이 조금 떨어질 수 있음.
  • 값이 크면 성능은 향상되지만, 디스크 사용량 증가 가능.

(2) checkpoint_timeout 조정 (체크포인트 빈도)

체크포인트는 WAL 파일을 정리하는 역할을 합니다. checkpoint_timeout을 줄이면 WAL 파일이 더 자주 삭제됩니다.

checkpoint_timeout = 5min  # 기본값: 5min (더 짧게 설정 가능)
  • 이 값을 줄이면 WAL이 빨리 삭제되지만, 너무 짧으면 성능이 떨어질 수 있음.
  • 대개 5~10분이 적절한 값.

(3) checkpoint_completion_target 조정

체크포인트의 완료 시간을 조정하여 성능을 최적화할 수 있습니다.

checkpoint_completion_target = 0.7  # 기본값: 0.9
  • 1.0에 가까울수록 부하를 분산시키지만, WAL이 오래 유지됨.
  • 0.5~0.7 정도로 설정하면 WAL 삭제가 빨라짐.

2. WAL 파일이 계속 쌓이는 문제 해결

(1) WAL 아카이빙 비활성화 (archive_mode)

WAL 아카이빙이 활성화되어 있으면 WAL 파일이 삭제되지 않고 계속 저장됩니다.
아카이빙이 필요 없다면 다음 설정을 확인하세요.

archive_mode = off
  • archive_mode = on이면 archive_command로 설정된 위치에 WAL이 보관됨.
  • 백업 기능을 사용하지 않는다면 off로 설정하는 것이 좋음.

(2) WAL 보존 주기 설정 (wal_keep_size)

wal_keep_size는 복제 슬롯(replication slot) 없이 유지할 WAL 크기를 지정합니다.

wal_keep_size = 512MB  # 기본값: 0 (제한 없음)
  • 기본값이 0이면 WAL이 무제한으로 유지될 수 있음!
  • 512MB ~ 1GB 정도로 설정하면 적절함.

(3) 사용하지 않는 replication slot 정리

복제 슬롯이 있으면 WAL이 삭제되지 않을 수 있습니다.
현재 replication slot 확인:

SELECT * FROM pg_replication_slots;

사용하지 않는 슬롯 삭제:

SELECT pg_drop_replication_slot('slot_name');
  • active = false 인 슬롯은 삭제해도 됨.
  • 불필요한 슬롯을 제거하면 WAL 공간을 확보할 수 있음.

3. 불필요한 WAL 파일 수동 삭제

(1) pg_archivecleanup 사용 (아카이빙 활성화된 경우)

만약 아카이빙이 활성화되어 있다면, pg_archivecleanup을 사용하여 불필요한 WAL 파일을 삭제할 수 있습니다.

pg_archivecleanup /path/to/archive WAL_segment

이 명령어는 /path/to/archive 폴더에서 지정한 WAL 세그먼트 이후의 파일을 삭제합니다.

(2) pg_resetwal 사용 (강제 초기화)

만약 WAL 파일이 너무 많아져서 긴급하게 삭제해야 한다면, pg_resetwal을 사용할 수도 있습니다.

pg_resetwal -f /var/lib/postgresql/data
  • 주의: 이 명령어는 WAL 로그를 강제 삭제하므로 데이터 무결성에 영향을 줄 수 있습니다.

4. 설정 변경 후 적용 방법

PostgreSQL을 재시작하거나 설정을 다시 로드해야 변경 사항이 적용됩니다.

SELECT pg_reload_conf();  -- 설정 파일 다시 로드 (재시작 없이 적용 가능)

또는 컨테이너 환경에서는 다음 명령어를 실행하세요.

docker restart <container_id_or_name>

결론

  1. WAL 크기 제한 (max_wal_size, min_wal_size 설정)
  2. 체크포인트 주기 조정 (checkpoint_timeout, checkpoint_completion_target)
  3. WAL 보존 설정 (wal_keep_size, archive_mode)
  4. 사용하지 않는 replication slot 제거
  5. 불필요한 WAL 파일 삭제 (pg_archivecleanup 등 활용)
반응형

'개발 (Development) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL/TimescaleDB] Hypertable과 Chunk를 포함한 최소 크기 덤프 방법  (0) 2025.02.17
[PostgreSQL] 데이터베이스 용량 조회 방법  (0) 2025.02.17
[PostgreSQL] 데이터베이스를 물리적으로 다른 서버에 있는 동일 데이터베이스로 옮기는 방법  (0) 2025.02.17
[PostgreSQL] PostgreSQL에서 SELECT 컬럼 수가 성능에 미치는 영향  (0) 2025.02.17
[PostgreSQL] ASC 인덱스가 있는데 DESC 인덱스를 추가해도 될까?  (0) 2025.02.16
'개발 (Development)/PostgreSQL' 카테고리의 다른 글
  • [PostgreSQL/TimescaleDB] Hypertable과 Chunk를 포함한 최소 크기 덤프 방법
  • [PostgreSQL] 데이터베이스 용량 조회 방법
  • [PostgreSQL] 데이터베이스를 물리적으로 다른 서버에 있는 동일 데이터베이스로 옮기는 방법
  • [PostgreSQL] PostgreSQL에서 SELECT 컬럼 수가 성능에 미치는 영향
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 개발 (Development) (151)
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (6)
        • PostgreSQL (37)
        • Python (26)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    deepseek
    백준알고리즘
    ADsP
    timescaledb
    Vue.js
    JPA
    리눅스 마스터 2급
    백준
    오답노트
    Linux
    백준온라인저지
    AWS
    MyBatis
    docker
    javascript
    typescript
    pandas
    PostgreSQL
    springboot
    java
    JSON
    Kubernetes
    리눅스 마스터 2급 2차
    Kafka
    DevOps
    python
    백준자바
    자바
    Linux master
    데이터분석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[PostgreSQL] WAL(Write-Ahead Logging) 로그 관리 가이드
상단으로

티스토리툴바