PostgreSQL 15 特性 - 新增 pg_waldump 过滤选项
PostgreSQL 主分支中针对 pg_waldump 新增了四类过滤选项,分别为 RelFileNode
、BlockNumber
、ForkNum
和 FPW
。本文将简要介绍一下这四个过滤选项。
RelFileNode 过滤选项
该过滤选项可以通过 Tablespace OID/Database OID/relfilenode
的方式来过滤 WAL 日志。例如,我们新建一个表,并插入记录,如下所示。
1 | CREATE TABLE account(id int, name text); |
接着,我们通过下面的语句查询表 account
的表空间 OID、数据库 OID 以及 relfilenode
。
1 | SELECT |
1 | relname | tablespace | database | relfilenode |
现在我们便可以通过 RelFileNode
的方式来过滤 WAL 日志,指定 --relation
选项。
1 | pg_waldump --relation 1663/5/16387 000000010000000000000001 |
这里需要注意的是,tablespace OID
和 relfilenode
必须是非负数,而 Database OID
则可以为 0
,例如,pg_database
表是共享的,我们可以通过指定 --relation 1664/0/1262
来查看该表的 WAL 日志。
1 | $ pg_waldump pgdata/pg_wal/000000010000000000000001 --relation 1664/0/1262 --fork vm --limit 1 |
BlockNumber 过滤选项
BlockNumber
过滤选项(--block
选项)需要与 RelFileNode
过滤选项一起使用,即指定 --block
选项必须指定 --relation
选项,它可以显示指定的数据块的修改日志,如下所示。
1 | pg_waldump --block 1 --relation 1663/5/16387 000000010000000000000001 |
ForkNum 过滤选项
PostgreSQL 在后端存储的时候会将数据表组织为 main
, vm
, fsm
和 init
四种类型,他们被被称为 ForkNum
,ForkNum
过滤选项(--fork
选项)可以过滤指定 Fork
类型的 WAL 日志。首先我们删除一些记录。
1 | ANALYZE; |
接着我们通过 pg_waldump 来查看 vm
的修改日志。
1 | pg_waldump --fork vm --relation 1663/5/16387 000000010000000000000001 |
FPW
过滤选项
FPW
过滤选项(--fullpage
选项),即 full page write
,它可以用于过滤 full page write
相关的 WAL 日志。
1 | CHECKPOINT |
如下所示,我们过滤了表 account
相关的 full page write
日志。
1 | pg_waldump --fullpage --relation 1663/5/16387 000000010000000000000001 |
实现
上述四个过滤选项的实现还是比较简单的,它在 pg_waldump 新增了 XLogRecordMatchesRelationBlock()
和 XLogRecordHasFPW()
来判断 WAL 日志是否满足过滤条件,您可以在这里看到完整的代码,后续这个提交涉及到了 fork
的优化。下面是 XLogRecordMatchesRelationBlock()
和 XLogRecordHasFPW()
函数的源码。
1 | /* |
逻辑还是比较简单的,就是从 WAL 日志里面读取,然后匹配过滤选项。
参考
[1] https://postgr.es/m/3a4c2e93-7976-2320-fc0a-32097fe148a7%40enterprisedb.com
[2] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=127aea2a65cd89c1c28357c6db199683e219491e
[3] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=52b5568432963b721698a2df1f37a0795b9611dc
一监生临终,谓妻曰:“我一生挣得这副衣冠,死后必为我殡殓。”
妻诺,既死穿衣套靴讫,惟圆帽左右欹侧难戴。
妻哭曰:“我的天,一顶帽子也无福戴。”
生复还魂张目谓妻曰:“必要戴的。”
妻曰:“非不欲带,恨枕不稳耳。”
生曰:“对门某医生家药碾槽,借来好做枕。”