PostgreSQL自带的命令行工具13- pg_waldump
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777
pg_waldump
是 PostgreSQL 的一个实用工具,用于查看和分析 Write-Ahead Logging (WAL) 文件的内容。WAL 是 PostgreSQL 用于保证事务日志的完整性和恢复能力的一种技术。每次数据库事务提交时,变更都会先被写入 WAL 文件。在发生故障时,WAL 文件用于恢复数据库到最后一次一致的状态。pg_waldump
提供了一种方式,来直观地查看这些 WAL 文件中的记录,帮助开发者和数据库管理员理解数据库变动和进行故障诊断。
通过help查看帮助文档。
[pg16@test ~]$ pg_waldump --help
pg_waldump decodes and displays PostgreSQL write-ahead logs for debugging.Usage:pg_waldump [OPTION]... [STARTSEG [ENDSEG]]Options:-b, --bkp-details output detailed information about backup blocks-B, --block=N with --relation, only show records that modify block N-e, --end=RECPTR stop reading at WAL location RECPTR-f, --follow keep retrying after reaching end of WAL-F, --fork=FORK only show records that modify blocks in fork FORK;valid names are main, fsm, vm, init-n, --limit=N number of records to display-p, --path=PATH directory in which to find WAL segment files or adirectory with a ./pg_wal that contains such files(default: current directory, ./pg_wal, $PGDATA/pg_wal)-q, --quiet do not print any output, except for errors-r, --rmgr=RMGR only show records generated by resource manager RMGR;use --rmgr=list to list valid resource manager names-R, --relation=T/D/R only show records that modify blocks in relation T/D/R-s, --start=RECPTR start reading at WAL location RECPTR-t, --timeline=TLI timeline from which to read WAL records(default: 1 or the value used in STARTSEG)-V, --version output version information, then exit-w, --fullpage only show records with a full page write-x, --xid=XID only show records with transaction ID XID-z, --stats[=record] show statistics instead of records(optionally, show per-record statistics)--save-fullpage=DIR save full page images to DIR-?, --help show this help, then exitReport bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
基本用法
pg_waldump [选项]... <WAL 文件名或目录>
常用选项
-f
,--follow
:连续输出 WAL 记录,类似于tail -f
命令。-n
,--limit
:限制输出的记录数量。-p
,--path
:指定 WAL 文件的搜索目录。-r
,--rmgr
:只显示指定资源管理器(rmgr)的记录。-s
,--start
:从指定的 LSN (Log Sequence Number) 开始输出。-t
,--timeline
:指定要阅读的时间线。-V
,--version
:输出版本信息。-x
,--xid
:只显示指定事务 ID 的记录。-z
,--stats
:在输出的末尾显示统计信息。--end
:结束于指定的 LSN (Log Sequence Number)。
示例1
查看指定 WAL 文件的内容。如查看 000000010000000000000034的内容
[pg16@test archivelog]$ pg_waldump /home/pg16/archivelog/000000010000000000000034
示例2
查看 000000010000000000000034的内容前10行。
[pg16@test archivelog]$ pg_waldump -n 10 /home/pg16/archivelog/000000010000000000000034
rmgr: Heap len (rec/tot): 171/ 171, tx: 15301, lsn: 0/340006F0, prev 0/33FFE700, desc: UPDATE old_xmax: 15301, old_off: 33, old_infobits: [], flags: 0x01, new_xmax: 0, new_off: 3, blkref #0: rel 1663/16505/16579 blk 16556, blkref #1: rel 1663/16505/16579 blk 5900
rmgr: Btree len (rec/tot): 64/ 64, tx: 15301, lsn: 0/340007A0, prev 0/340006F0, desc: INSERT_LEAF off: 158, blkref #0: rel 1663/16505/16587 blk 989
rmgr: Heap len (rec/tot): 79/ 79, tx: 15297, lsn: 0/340007E0, prev 0/340007A0, desc: INSERT off: 153, flags: 0x00, blkref #0: rel 1663/16505/16589 blk 89
rmgr: Transaction len (rec/tot): 34/ 34, tx: 15296, lsn: 0/34000830, prev 0/340007E0, desc: COMMIT 2024-05-05 21:27:33.826619 PDT
rmgr: Transaction len (rec/tot): 34/ 34, tx: 15297, lsn: 0/34000858, prev 0/34000830, desc: COMMIT 2024-05-05 21:27:33.826634 PDT
rmgr: Heap len (rec/tot): 72/ 72, tx: 15294, lsn: 0/34000880, prev 0/34000858, desc: HOT_UPDATE old_xmax: 15294, old_off: 92, old_infobits: [], flags: 0x20, new_xmax: 0, new_off: 94, blkref #0: rel 1663/16505/16580 blk 0
rmgr: Transaction len (rec/tot): 34/ 34, tx: 15293, lsn: 0/340008C8, prev 0/34000880, desc: COMMIT 2024-05-05 21:27:33.826720 PDT
rmgr: Heap2 len (rec/tot): 57/ 57, tx: 0, lsn: 0/340008F0, prev 0/340008C8, desc: PRUNE snapshotConflictHorizon: 5174, nredirected: 0, ndead: 1, nunused: 0, redirected: [], dead: [20], unused: [], blkref #0: rel 1663/16505/16579 blk 13566
rmgr: Heap len (rec/tot): 74/ 74, tx: 15302, lsn: 0/34000930, prev 0/340008F0, desc: HOT_UPDATE old_xmax: 15302, old_off: 7, old_infobits: [], flags: 0x60, new_xmax: 0, new_off: 62, blkref #0: rel 1663/16505/16579 blk 13566
rmgr: Heap len (rec/tot): 79/ 79, tx: 15294, lsn: 0/34000980, prev 0/34000930, desc: INSERT off: 17, flags: 0x00, blkref #0: rel 1663/16505/16589 blk 93
这会输出 000000010000000000000034
WAL 文件中的所有记录。输出中包括每条记录的类型、大小、事务 ID 以及实际的日志数据。
注意事项
pg_waldump
是一个底层工具,主要用于调试和分析,正常的数据库操作和维护不需要它。- 在使用
pg_waldump
时,需要对 WAL 记录的格式和内容有一定的了解。 - WAL 文件通常位于 PostgreSQL 的数据目录下的
pg_wal
目录中(在旧版 PostgreSQL 中是pg_xlog
)。
pg_waldump
为深入理解 PostgreSQL 的工作原理和事务日志提供了窗口,但它更多地是面向有经验的数据库管理员和开发者。
谨记:心存敬畏,行有所止。