본문 바로가기
Database & Bigdata/PostgreSQL

[PostgreSQL] WAL 이란 ? / WAL 관련 파라미터

by jionee 2022. 7. 5.
SMALL

WAL ( Write-Ahead Logging )

- 데이터 무결성을 보장하는 표준 방법

- 데이터베이스에 쿼리를 날려 변경 이벤트를 실행할 때, 데이터를 변경하기 전에 해당 변경 내용을 로그에 미리 담아두고 이후에 변경한다는 개념 (오라클의 redo-archive와 비슷한 역할)

- 이슈(데이터 충돌, 파괴 등)가 발생했을 때 WAL 파일에 로깅된 내용을 보고 복구가 가능함

 

 

WAL 관련 파라미터 ( postgresql.conf에서 변경 )

⭐ wal_buffers

- 트랜 잭션 로그(WAL log) 버퍼

- WAL 데이터에 사용되고 아직 디스크에 기록되지 않은 공유 메모리의 합계

- shared_buffers의 1/32 크기로 지정 권장

- 64KB 이상, WAL 세그먼트 1개 크기 이하 (일반적으로 16MB) 이어야 함

- 32KB 미만의 양의 값은 32KB로 처리 됨

- WAL 버퍼의 내용은 모든 트랜잭션 commit 마다 디스크에 쓰기 되므로 극단적으로 큰 값은 별다른 장점이 없을 가능성 큼

  다만, 이 값을 최소한 몇 메가 바이트로 설정하면 여러 클라이언트가 한꺼번에 커밋함으로써 busy한 서버의 쓰기 성능이    개선됨

 

 

⭐ wal_level

- WAL 파일에 기록되는 정보의 양 결정

  • minimal (기본값) : 복구에 필요한 최소의 로그만 기록
  • archive : 복구에 필요한 모든 WAL 아카이빙에 필요한 정보를 로깅
                   WAL 아카이빙 ( archive_mode) 및 스트링밍 복제를 활성화 하러면 replica 이상을 사용해야함
  • logical : replica와 동일한 정보 + WAL에서 논리적 변경 세트를 추출하는 데 필요한 정보가 기록
                  updata 및 delete 문이 실행되는 경우 wal 볼륨이 증가함

https://kimdubi.github.io/postgresql/pg_wal_level/

 

PostgreSQL wal_level=replica / logical 차이

PostgreSQL 설정 중 wal_level 이라는 설정이 있습니다. WAL 에 저장되는 데이터의 양이나 수준을 지정하는 설정으로 streaming replication 을 위해서는 최소 wal_level = replica logical replication을 위해서는 최소 w

kimdubi.github.io

 

 

⭐ max_wal_sanders

- 스트리밍 기반의 백업 클라이언트로부터의 동시 연결 최대 수를 지정

- 기본값은 복제를 하지 않는 0

- max_connections 보다 큰 값을 설정할 수 없음

- 스트리밍 클라이언트의 연결이 갑작스럽게 끊어지면 타임아웃이 될 때 까지 orphan slot이 생기기 때문에 예상되는 클라이언트의 최대 수보다 약간 크게 설정 ( 일반적으로 slave의 수 +1 )

 

 

⭐ wal_keep_segments

- 0(기본값)인 경우 시스템은 대기 서버를 위한 추가 세그먼트를 유지하지 

- slave 노드가 스트리밍 복제를 위해 예전 로그 파일을 가져와야 하는 경우 pg_xlog 디렉토리에 저장되는 과거 로그 파일 세그먼트의 최소 수를 지정

- wal segment가 너무 빨리 갱신되어 빠른 속도로 사라지게 되고, slave 노드에 기록되는 wal segment 속도가 master 노드의 wal 갱신 속도를 따라가지 못하면 replication이 중단됨

- 서버의 디스크 공간, DB 트랜잭션에 따른 wal의 갱신 속도를 고려해서 설정값 책정

 

 

⭐ max_wal_size

- 체크 포인트 작업을 자동으로 진행할 WAL 최대 크기

- 기본값은 1GB

- 갑자기 많이 쌓이는 과도한 데이터량이나, archive_command 작업이 계속 실패하고 있거나, wal_keep_size 설정값을 크게 지정한 경우에는 WAL 총 크기는 이 값을 초과할 수 있음

- 해당 파라미터 값을 줄이면 checkpoint가 좀 더 빈번하게 발생함

   장점 : redo에 필요한 작업이 줄어드므로 충돌 후 복구가 빨라짐

   단점 : dirty  페이지를 빈번하게 기록함으로써 늘어나는 비용, 경우에 따라서는 디스크 I/O 발생

       * dirty 페이지 : 읽은 파일이 디스크에 업데이트 되지 않고 page cache 내 특정 공간에만 업데이트 되어 있는 경우가             있는데 이때 그 특정 공간을 dirty page라고 함

 

 

⭐ min_wal_size

- WAL 조각 파일들은 더이상 보관할 필요가 없어지면 지워지지않고, 앞으로 사용될 파일로 그 이름을 바꿈

이렇게 남겨두는 WAL의 최소값을 지정하는 파라미터

- 기본값은 80MB

 

댓글