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