pg_xlogdump是一个用于解码并显示 磐维数据库的预写式日志 (WAL) 的工具。此工具只能由安装该服务器的用户使用,因为它要求对数据目录的只读访问。
保证数据库目录存在且路径正确。
pg_xlogdump [OPTION]... [STARTSEG [ENDSEG]]
OPTION取值如下所示:
- -b, --bkp-details
输出有关备份块的详细信息。
- -e, --end=RECPTR
读取到日志的指定位置。
- -f, --follow
在到达指定 WAL 的末尾后,继续解析下一个文件。
- -n, --limit=N
指定要显示的日志记录的数量。
- -p, --path=PATH
指定 WAL 日志存放的目录。默认路径为 ./pg_xlog 。
- -r, --rmgr=RMGR
仅显示资源管理器生成的记录。若参数设置为 -r = list 则列出有效的资源管理器名称。
- -s, --start=RECPTR
指定日志记录的读取位置。默认从所找到的最早的文件的第一个可用日志记录开始读取。
- -S, --size=n
设置解析资源池化模式下日志时的大小(不包括 ctl 信息长度)。 默认大小为 512 1024 1024 * 1024 (512GB)
- -t, --timeline=TLI
选择指定的 timeline 读取日志记录。默认使用 1 或 STARTSEG 。
- -V, --version
显示版本信息。
- -w, --write-FPW
显示整页写入的信息,使用该参数时应同时使用 -b 。
- -x XID
仅显示给定的事物 ID 记录。
- -z, --stats
显示插入记录的统计信息而不显示每条记录。
- -v, --verbose
输出记录的详细信息。
- -?, --help
打印帮助信息。
- --enable-dss
资源池化参数,开启资源池化模式。
- --socketpath=SOCKETPATH
资源池化参数,dss 实例进程使用的 socket 文件路径。
STARTSEG:
指定开始读取的 WAL 段文件名(如 000000010000000000000001)。
ENDSEG:
指定结束读取的 WAL 段文件名。若省略,则默认读取到可用日志的末尾。
模拟数据,创建表并增加主键
create table test_xlogdump(id int, name varchar(10),insert_time timestamp not null default now());
alter table test_xlogdump add primary key(id);
insert into test_xlogdump values(1,'panweidb1');
pg_xlogdump -p $PGDATA/pg_xlog 000000010000000500000062
输出会包含每条记录的 REDO @ LSN、xid、操作描述(desc)等信息
某个事务 ID(例如通过查询 xmin获得),查看它产生了哪些 WAL:
pg_xlogdump -p $PGDATA/pg_xlog -x 47476 000000010000000500000062
REDO @ 5/62004418; LSN 5/62004488: prev 5/620041D8; xid 47476; term 603; len 11; total 105; crc 2232514816; desc: Heap - XLOG_HEAP_INSERT insert(init): pd_xid_base 47473 off 1, blkref #0: rel 1663/20116/187899/-1/0, forknum:0 storage HEAP DISK blk 0 lastlsn 0/0
REDO @ 5/62004488; LSN 5/620044F0: prev 5/62004418; xid 47476; term 603; len 8; total 104; crc 1015726416; desc: Btree - lev 0, blkref #0: rel 1663/20116/187903/-1/0, forknum:0 storage HEAP DISK blk 1 lastlsn 0/0, blkref #2: rel 1663/20116/187903/-1/0, forknum:0 storage HEAP DISK blk 0 lastlsn 5/62003D58
REDO @ 5/620044F0; LSN 5/62004548: prev 5/62004488; xid 47476; term 603; len 2; total 82; crc 1111253163; desc: Btree - insert leaf: off 1, blkref #0: rel 1663/20116/187903/-1/0, forknum:0 storage HEAP DISK blk 1 lastlsn 5/620044F0
REDO @ 5/62004548; LSN 5/62004588: prev 5/620044F0; xid 47476; term 603; len 24; total 58; crc 3219609199; desc: Standby - XLOG_STANDBY_CSN_COMMITTING, xid 47476, csn 23762
REDO @ 5/62004588; LSN 5/620045D0: prev 5/62004548; xid 47476; term 603; len 32; total 66; crc 3633394922; desc: Transaction - XLOG_XACT_COMMIT_COMPACT commit: 2026-05-06 16:57:55.636535 CST; csn:23762; RecentXmin:47476
了解这个 WAL 文件中各类操作(如 XLOG、Heap、Transaction、Btree 等)的数量和大小占比
pg_xlogdump -p $PGDATA/pg_xlog -z 000000010000000500000062
可以先执行 pg_xlogdump -r list查看支持的资源管理器列表
pg_xlogdump -p $PGDATA/pg_xlog -r heap 000000010000000500000062
如果有具体的 LSN 起止位置(例如从数据库报错日志或 pg_current_xlog_location()获得):
pg_xlogdump -p $PGDATA/pg_xlog -s 5/62004488 -e 5/62004548
统计某个 WAL 文件中涉及表修改(Heap 操作)的情况,或提取特定 rel OID 的操作:
pg_xlogdump -p $PGDATA/pg_xlog 000000010000000500000061 000000010000000500000062 | grep "Heap" | awk '{print $0}'
这对于分析某段时间内的表变更频率、定位大量数据导入/删除操作很有帮助
REDO @ 5/62004418; LSN 5/62004488: prev 5/620041D8; xid 47476; term 603; len 11; total 105; crc 2232514816; desc: Heap - XLOG_HEAP_INSERT insert(init): pd_xid_base 47473 off 1, blkref #0: rel 1663/20116/187899/-1/0, forknum:0 storage HEAP DISK blk 0 lastlsn 0/0
REDO @:本条 WAL 记录的 Redo 起点 LSN(重放时的起始位置)
LSN:当前记录的 LSN
prev:上一条记录的 LSN
xid:事务 ID
desc:操作描述,如 XLOG - checkpoint、Heap - XLOG_HEAP_INSERT、Btree - lev0等
rel:相关的关系(表)文件节点信息,格式通常为 tablespace/dboid/relfilenode,
select pg_relation_filenode('schema.table');比对确认具体表。
len / total:记录长度 / 总长度




