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/
⭐ 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
'Database & Bigdata > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] Vacuum & Freeze (3) | 2023.01.12 |
---|---|
[PostgreSQL] 서비스 운영을 위한 Postgresql.conf 기본 parameters 셋팅 (0) | 2022.11.01 |
[PostgreSQL] Lock & Deadlock (0) | 2022.06.09 |
[PostgreSQL] DB LOG CHECK : ERROR 23505, 22021,57014,21000 / FATAL : 25P03 (0) | 2022.05.26 |
[PostgreSQL] Streaming Replication / Logical Replication (0) | 2022.05.23 |
댓글