PostgreSQL

PostgreSQL: pg_waldump

dewstream 2025. 7. 18. 08:00
728x90

※ PostgreSQL: pg_waldump.

 

안녕하세요. 듀스트림입니다.

 

오늘은 복구 관련 이슈 시 분석을 도와주는 pg_waldump에 대한 내용입니다.

 

WAL에 대한 내용은 아래 포스팅 참고 부탁드립니다.

 

PostgreSQL: WAL

※ PostgreSQL: WAL. 안녕하세요. 듀스트림입니다. 오늘은 매우 중요한 데이터 무결성과 복구를 보장하는 핵심 메커니즘인 WAL(Write-Ahead Logging)에 대한 내용입니다.1. WAL의 기본 개념Write-Ahead Logging (WAL)

dewstream.tistory.com


pg_waldump?

pg_waldump는 PostgreSQL의 WAL(Write-Ahead Logging) 파일을 사람이 읽을 수 있는 형태로 분석/출력해주는 디버깅 및 분석 도구입니다. PostgreSQL 내부 동작을 분석하거나 복구 관련 이슈를 파악할 때 사용합니다.

항목 내용
목적 WAL 파일의 내부 내용을 디코딩하고 출력
사용 환경 PostgreSQL 9.3 이상 (PostgreSQL 설치에 포함됨)
주요 용도 WAL 변경 사항 확인, 복제 문제 분석, crash 분석 등
위치 일반적으로 PGHOME/bin/pg_waldump 에 존재

사용법

pg_waldump [OPTIONS] <WAL 파일>

 

레코드 필드 설명

필드 예시 설명
rmgr Btree WAL 레코드 생성자(Resource Manager)여기서는 B-Tree 인덱스 작업을 의미
len (rec/tot) 64/64 WAL 레코드의 길이 (payload/총길이)보통 동일한 값을 가짐
tx 798 이 레코드를 생성한 트랜잭션 ID
lsn 2/04000060 현재 WAL 레코드의 LSN(Log Sequence Number)
prev 2/03FFFFE8 이전 WAL 레코드의 LSN (연결 리스트처럼 추적 가능)
desc INSERT_LEAF off: 92 수행된 작업의 설명INSERT_LEAF는 B-Tree leaf 노드에 index tuple이 삽입된 것off: 92는 오프셋 번호 (해당 블록 내에서의 위치)
blkref #0 rel 1663/5/16444 blk 2677 WAL 기록이 영향을 준 테이블/인덱스 블록 정보:• 1663 = tablespace OID• 5 = database OID• 16444 = relation (table or index) OID• blk 2677 = 해당 relation의 블록 번호

 

옵션

옵션 인자 설명
-b, --bkp-details 없음 백업 블록에 대한 상세 정보 출력 (backup block = full page write)
-B, --block=N N = 블록 번호 --relation과 함께 사용 시, 해당 블록 번호에 대한 레코드만 출력
-e, --end=RECPTR RECPTR = LSN 출력 종료 LSN 지정 (예: 2/04000100)
-f, --follow 없음 WAL 끝에 도달해도 계속 대기 (실시간 tail 기능)
-F, --fork=FORK main, fsm, vm, init 지정한 포크에 해당하는 블록 변경만 출력
-n, --limit=N N = 숫자 출력할 레코드 수 제한
-p, --path=PATH 디렉토리 경로 WAL segment 파일이 위치한 경로 지정기본: 현재 디렉토리, ./pg_wal, $PGDATA/pg_wal
-q, --quiet 없음 오류 외의 출력 생략 (조용한 모드)
-r, --rmgr=RMGR RMGR = 리소스 관리자 특정 rmgr로 생성된 WAL 레코드만 출력--rmgr=list로 목록 확인 가능
-R, --relation=T/D/R T/D/R = tablespace/db/relation OID 특정 relation (테이블/인덱스 등) 에 대한 블록 변경만 출력
-s, --start=RECPTR RECPTR = LSN 출력 시작 위치 LSN 지정
-t, --timeline=TLI TLI = 타임라인 번호 읽어올 타임라인 지정 (기본: 1 또는 STARTSEG 사용 값)
-V, --version 없음 pg_waldump 버전 정보 출력 후 종료
-w, --fullpage 없음 full page write를 포함한 레코드만 출력
-x, --xid=XID 트랜잭션 ID 해당 트랜잭션 ID의 레코드만 출력
-z, --stats[=record] 선택: record 통계 정보만 출력. =record로 상세 레코드별 통계 출력 가능
--save-fullpage=DIR 디렉토리 경로 WAL 내의 full page 이미지를 해당 디렉토리에 저장
-?, --help 없음 도움말 출력 후 종료

활용 시나리오

상황 설명
장애 분석 특정 시점의 데이터 변경 내역 추적
복제 이슈 분석 복제 지연, WAL apply 오류 원인 파악
성능 튜닝 빈번한 테이블/인덱스 변경 여부 확인

오늘은 여기까지~

 

728x90