생계/PostgreSQL2025. 7. 23. 23:10
반응형

PostgreSQL 은 WAL(Write Ahead Log) 라는 매커니즘을 통해서 데이터 무결성과 복구를 보장한다. 
WAL은 데이터베이스에 변경 사항을 실제 데이터 파일에 쓰기 전에 먼저 로그에 기록하는 방식이다. 
이 로그 기록이 성공적으로 이루어진 후에야 디스크에 변경 내용을 적용하기 때문에,
장애 발생 시 WAL에 기록된 로그를 통해 데이터베이스를 일관된 상태로 복구할 수 있다.

1. WAL  파일 관련 파라미터

파라미터 설명 기본값 및 참고사항
wal_level WAL에 기록되는 정보의 양을 결정. (복제, 아카이브, 논리복제) replica(복제용) / logical(논리복제용) / minimal(최소)
max_wal_size WAL 파일들이 차지할 수 있는 최대 저장 용량(soft limit) 1GB (가변적이며 초과 가능)
min_wal_size 체크포인트 완료 후 유지할 최소 WAL 용량 80MB
wal_keep_size 복제 슬롯(복제 용도) 유지 시 WAL 최소 보존 크기 기본값 없음, 설정 권장
max_slot_wal_keep_size 복제 슬롯에 할당된 WAL 저장 공간 최대 크기 제한 (PostgreSQL 13 이상) 1GB 권장
wal_buffers WAL 작업 시 사용하는 메모리 크기, 기본은 shared_buffers 크기의 1/32 약 16MB (자동)
checkpoint_timeout 체크포인트 간격, WAL 삭제는 checkpoint 이후에 가능 기본 5분, 운영환경에 따라 늘릴 수 있음
checkpoint_completion_target 체크포인트 작성을 부하를 분산하기 위한 비율 0.9 (디스크 부하 완화를 위해)
wal_compression WAL에 기록할 때 데이터 압축 여부 off 기본, 켜면 성능 저하 대비 WAL 크기 감소 가능
full_page_writes 체크포인트 이후 수정된 페이지의 전체 내용을 처음 수정 시 WAL에 기록 on 기본, 운영환경에서 데이터 무결성 위해 권장
archive_mode WAL 세그먼트 아카이브 여부 설정 off 기본
archive_command 완료된 WAL 파일을 아카이브할 때 실행할 명령어 설정 아카이브 사용 시 필수
wal_sender_timeout 복제 송신 프로세스의 타임아웃 설정 0(무한) 또는 10분 이상 권장
max_replication_slots 복제 슬롯의 최대 개수 설정 복제할 노드 수에 따라 설정 필요
max_wal_senders WAL 송신자 프로세스 최대 개수 설정 복제 슬롯 수보다 크게 설정해야 함

 

- max_wal_size 

 이름때문에 여기서 설정한 값 이상으로는 wal 사이즈가 커지지 않을 것 같은 착각이 들게 만든다. 
 하지만 실제로는 soft limit 이라, 강제되지 않고 복제지연 등의 이유로 wal 삭제가 되지 않으면 설정 값 이상으로 파일이 쌓인다. 
 RDS 에서 wal 파일은 독립된 공간이 아닌 데이터파일, 로그파일 등과 함께 공유해서 사용한다.
 운영중에 free storage 공간 확인 필요.

- wal_level 

  minimal : 장애 복구에 필요한 정보까지만 저장한다. 커밋이 완료된 지점까지 복구 가능.
  replica : 장애복구 + 복제에 필요한 정보까지 저장 
  logical: replica보다 더 상세하게 WAL을 기록. 테이블 단위의 논리적 변경사항(DML)을 행 단위로 캡처. 
      CDC(Change Data Capture)나 논리적 복제에 사용됩니다. 커밋 완료된 트랜잭션 변경을 외부 스트리밍하는 데 중점

반응형
Posted by 돌고래트레이너