logo
문의하기
서비스리소스블로그아카데미
logo
문의하기
logo

데이터와 IT 흐름을 읽는 시선,
뉴스레터 EXEM View 구독하기

Subscribe

주식회사 엑셈

서울시 강서구 마곡중앙8로5길 40

Tel 02-6203-6300 ㅣ Fax 02-6203-6301

ⓒ EXEM Co., Ltd. All Rights Reserved.
개인정보 처리방침서비스 이용약관
  • 서비스

    • Database
    • Application
    • AIOps
    • LLMOps
    • Big Data
    • All-in-One
    • Consulting
  • 신청

    • 세미나
    • 사옥 투어
  • 회사

    • 기업 소개
    • 채용 안내
    • IR
    • 오시는 길
  • 자료

    • 제품 브로슈어
    • 제품 살펴보기
    • 도서 실습자료
  • awsaws
  • microsoftmicrosoft
  • oracleoracle
  • naver-cloudnaver-cloud
PostgreSQL New Feature - 17 Release (4)
PostgreSQL New Feature - 17 Release (4)

PostgreSQL New Feature - 17 Release (4)

PostgreSQL New Feature는 시리즈로 구성됩니다.
  1. PostgreSQL 17 주요 기능 설명과 파라미터, 시스템 카탈로그 변화
  1. PostgreSQL 17 추가, 개선 기능
  1. PostgreSQL 17 Vacuum 성능 향상
  1. PostgreSQL 17 증분백업(Incremental Backup)
본 문서에서는 증분 백업 수행/복구하는 방법을 설명한 후, 증분 백업을 위한 WAL Summary 기능에 대한 내용을 기술합니다.
 
 

증분 백업(Incremental Backup)

증분 백업을 지원하지 않았던 PostgreSQL 16 까지는 데이터베이스 전체 백업을 기본으로 백업을 수행하였습니다. 따라서, 백업 수행할 때마다 데이터베이스 크기만큼의 백업 파일이 생성되었습니다. 또한, 백업 이후의 데이터를 복구하기 위하여 WAL 파일이 삭제되지 않게 아카이빙 해두고 이를 이용하여 복구를 수행할 수 있었습니다. 이러한 백업 과정은 시간이 많이 소요되고 필요한 스토리지 공간도 많이 필요하였습니다.
PostgreSQL 17부터는 증분 백업(Incremental Backup)을 지원하여 백업 과정의 시간과 스토리지 공간을 절약할 수 있습니다. 증분 백업을 위해서는 데이터베이스 전체 백업이 1회 필요하지만, 전체 백업 이후에는 마지막 백업 이후의 변경된 내용만 캡처하는 방식으로 백업이 수행됩니다. 즉, 전체 백업이든 다른 증분 백업이든 마지막 백업 이후에 수행된 변경 사항만 캡처합니다. 이는 변경 사항에 관계없이 전체 백업에 비해 백업 시간과 스토리지 소비를 크게 줄일 수 있습니다.
 

증분 백업을 위해 추가된 기능

pg_basebackup Utility 옵션 추가

증분 백업을 지원하기 위해 -i 옵션이 추가되었으며, 마지막 백업의 manifest file을 지정하여 수행합니다.
 

pg_combinebackup Utility 신규 추가

여러 증분 백업을 단일 백업으로 병합하기 위해 PostgreSQL 17에서 새롭게 추가된 Utility입니다.
주요 옵션
설명
-d, --debug
디버그 로그 출력
-n, --dry-run
병합을 실제로 수행하지 않고, 어떤 작업이 이루어질지 미리 확인
-o, --output=DIRECTORY
재구성된 데이터 디렉토리를 저장할 경로를 지정
backup_directory
병합할 증분 백업의 경로를 하나 이상 지정.

시스템 파라미터 생성

파라미터
기본값
설명
summarize_wal
off
WAL Summary 기능 활성화 여부. on으로 설정되어야 증분 백업 가능
wal_summary_keep_time
14400 (10d)
WAL Summary 파일 보관 주기 설정
 

증분 백업 수행

증분 백업 기능을 사용하기 위해서는 summarize_wal 시스템 파라미터를 활성화해야 합니다.
증분 백업을 수행하기 전 기본(전체) 백업을 먼저 생성합니다.
기본(전체) 백업 후 데이터를 생성한 후 증분 백업을 수행합니다. 증분 백업 수행 시 주의해야 할 사항은 가장 마지막 백업의 backup_manifest를 사용해야 합니다. 이 단계에서 가장 마지막 백업은 기본(전체) 백업으로 base_backup의 backup_manifest를 지정해야 합니다.
다시 데이터를 추가한 후 증분 백업을 수행합니다. 증분 백업 수행 시 주의해야 할 사항은 가장 마지막 백업의 backup_manifest를 사용해야 합니다. 이 단계에서 가장 마지막 백업은 첫 번째 증분 백업으로 incremental_backup01의 backup_manifest를 지정해야 합니다.
 

증분 백업 복원

증분 백업 수행 단계에서 한 번의 기본(전체) 백업과 두 번의 증분 백업을 수행하였습니다. 이 백업들을 복원하고 복원된 데이터 디렉터리로 데이터베이스를 시작한 후 앞서 입력한 테스트 데이터가 존재하는지 확인합니다.
PostgreSQL 17에서 새롭게 생긴 pg_combinebackup Utility를 사용하여 모든 증분 백업을 결합하여 복원할 수 있습니다. 앞서 생성한 증분 백업을 pg_combinebackup Utility로 결합하여 /home/postgres/pg17.combine_backup 디렉터리로 복원합니다.
복원된 디렉터리에 존재하는 postgresql.conf 파일은 백업 대상의 postgresql.conf와 동일하게 구성됩니다. 복원된 디렉터리를 데이터 디렉터리로 사용하는 데이터베이스를 시작하기 위해서 postgresql.conf에서 Port를 변경한 후 데이터베이스를 시작합니다.
데이터베이스에 접속하여 데이터를 확인합니다. 앞서 테스트 데이터는 test01 테이블에 총 2,000,000 row가 저장되어 있습니다. c1=1인 데이터는 1,000,000 row, c1=2인 데이터는 1,000,000 row가 저장되어 있습니다.
 

Trouble Shooting

summarize_wal 파라미터를 활성화하지 않은 경우

summarize_wal 파라미터를 활성화하지 않은 경우 기본 백업은 가능하지만, 증분 백업은 불가능합니다.
summarize_wal=on 설정 후 증분 백업을 다시 수행하면 아래와 같은 에러 메시지가 발생합니다.
기본 백업을 수행한 후 summarize_wal을 활성화하였기 때문에 증분 백업이 실패하게 됩니다. 따라서 summarize_wal을 활성화 한 이후 새로 기본 백업을 수행한 후 증분 백업을 수행해야 정상적으로 증분 백업이 가능합니다.
 

pg_combinebackup 수행 시 백업 디렉터리 나열을 순서대로 하지 않은 경우

pg_combinebackup 수행 시 백업 디렉터리 나열 순서는 백업 순서대로 나열해야 합니다. 백업 순서대로 백업 디렉터리를 나열하지 않은 경우 pg_combinebackup은 실패하여 에러가 발생하며 증분 백업 복원도 되지 않습니다.
기본 백업이 선두에 나열되지 않은 경우 (증분백업1 → 증분백업2 → 기본백업 순으로 나열)
증분 백업이 순서대로 나열되지 않은 경우 (기본백업 → 증분백업2 → 증분백업1 순으로 나열)
 
 

WAL Summary 기능

PostgreSQL 17에서 새롭게 생긴 walsummarizer 프로세스는 WAL과 관련된 새로운 Background 프로세스로 WAL 로그를 효율적으로 요약하고 통계를 수집하는 역할을 수행합니다.

WAL Summary 관련 파라미터

파라미터
카테고리
기본값
설명
summarize_wal
Write-Ahead Log > Summarization
off
WAL Summary 기능 활성화 여부
wal_summary_keep_time
Write-Ahead Log > Summarization
14400 (10d)
WAL Summary 파일 보관 주기 설정
WAL Summary 기능 활성화를 위해서는 wal_level 파라미터를 replica 또는 logical로 설정해야 하고, PostgreSQL 17에서 새로 생긴 summarize_wal 파라미터를 on으로 활성화해야(기본값:off) 합니다.
WAL Summary 기능이 활성화되면, walsummarizer 프로세스가 실행되어 pg_wal/summaries 디렉터리에 WAL Summary가 저장됩니다.
WAL Summary 파일은 PostgreSQL 17에서 새로 생긴 wal_summary_keep_time 파라미터에 의해 유지됩니다. wal_summary_keep_time 파라미터의 기본값은 14400분(10일)으로 WAL Summary 파일은 설정 값에 의해 10일이 지나면 자동으로 제거됩니다.
테스트를 위해 테이블 생성 및 데이터를 입력한 후 강제로 WAL Summary 파일을 생성한 후 WAL Summary의 내용을 확인합니다.
CHECKPOINT를 발생시켜 WAL Summary 파일을 생성된 것을 확인할 수 있습니다. WAL Summary 파일의 내용은 편집기로 확인할 수 없고, PostgreSQL 17에서 새롭게 생성된 pg_walsummary Utility를 통해 확인할 수 있습니다.
pg_walsummary 결과를 보면 REL 16384가 test01 테이블이고, blocks 0.. 8을 통해 9개의 Block이 변경되었음을 확인할 수 있습니다. 이러한 내용은 아래 WAL Summary 함수 설명 시 확인할 수 있습니다.
WAL Summary 파일 내용을 확인하기 위해서 아래와 같은 함수를 제공합니다.
함수
설명
pg_available_wal_summaries()
각 WAL Summary 파일의 시작 LSN과 종료 LSN 반환
pg_wal_summary_contents( tli , start_lsn , end_lsn )
지정한 LSN 사이의 업데이트 정보 반환
pg_get_wal_summarizer_state()
WAL Summary 생성 상태 반환
 

pg_available_wal_summaries()

WAL Summary 파일의 시작 LSN과 종료 LSN은 함수를 수행하지 않아도 WAL Summary 파일명에서 유추할 수 있습니다.
notion image
 

pg_wal_summary_contents( tli , start_lsn , end_lsn )

컬럼
설명
relfilenode
Relation 파일 번호 (pg_class의 relfilenode 컬럼을 통해 Relation 이름 확인 가능)
reltablespace
Relation의 테이블스페이스 oid (pg_tablespace의 oid 컬럼을 통해 테이블스페이스 이름 확인 가능)
reldatabase
Relation의 데이터베이스 oid (pg_database의 oid 컬럼을 통해 데이터베이스 이름 확인 가능)
relforknumber
Relation에서의 Fork 번호
relblocknumber
Relation에서의 Page 번호 (위 예시에서는 relfilenode = 16384인 Relation에 9개 블록이 수정되었음을 의미)
is_limit_block
f : WAL 레코드에 의해 수정이 있었음을 표시t and relblocknumber > 0 : Relation Fork가 WAL 레코드 범위 내에서 relblocknumber로 지정된 길이로 Truncate 되었음을 표시t and relblocknumber = 0 : Relation Fork가 WAL 레코드 범위 내에서 생성되거나 삭제 되었음을 표시
Relation 이름 확인 (relfilenode)
테이블스페이스 이름 확인 (reltablespace)
데이터베이스 이름 확인 (reldatabase)
수정된 블록 개수 확인 (relblocknumber)
 

pg_get_wal_summarizer_state()

컬럼
설명
summarized_tli
walsummarizer 프로세스가 실행된 적이 없는 경우 : 0walsummarizer 프로세스가 실행된 경우 : 디스크에 기록된 마지막 WAL Summary 파일의 TLI(Timeline) 표시
summarized_lsn
walsummarizer 프로세스가 실행된 적이 없는 경우 : 0/0walsummarizer 프로세스가 실행된 경우 : 디스크에 기록된 마지막 WAL Summary 파일의 종료 LSN 표시
pending_lsn
walsummarizer 프로세스가 실행 중이 아닌 경우 : 0/0walsummarizer 프로세스가 실행 중인 경우 : 마지막 레코드의 종료 LSN 표시. (summarized_lsn 보다 크거나 같음)
summarizer_pid
walsummarizer 프로세스가 실행 중이 아닌 경우 : NULLwalsummarizer 프로세스가 실행 중인 경우 : walsummarizer 프로세스의 PID
 
 

 
 
함께 보면 좋은 아티클
PostgreSQL New Feature - 16 Release (1) | 엑셈
PostgreSQL New Feature 16 Release 알아보기
PostgreSQL New Feature - 16 Release (1) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-1
PostgreSQL New Feature - 16 Release (1) | 엑셈
PostgreSQL New Feature - 17 Release (3) | 엑셈
PostgreSQL New Feature 17 Release 알아보기
PostgreSQL New Feature - 17 Release (3) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-6
PostgreSQL New Feature - 17 Release (3) | 엑셈
Table of Contents
증분 백업(Incremental Backup)증분 백업을 위해 추가된 기능pg_basebackup Utility 옵션 추가pg_combinebackup Utility 신규 추가시스템 파라미터 생성증분 백업 수행증분 백업 복원Trouble Shootingsummarize_wal 파라미터를 활성화하지 않은 경우pg_combinebackup 수행 시 백업 디렉터리 나열을 순서대로 하지 않은 경우WAL Summary 기능WAL Summary 관련 파라미터pg_available_wal_summaries()pg_wal_summary_contents( tli , start_lsn , end_lsn )pg_get_wal_summarizer_state()