暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

通过pg_waldump 来分析Halo wal日志

原创 Halo Tech 2023-10-16
245

    pg_waldump是Halo数据库用来对wal日志进行查看的命令,需要pg_waldump执行命令对于要读取的日志有只读的权限即可。

    在 pg_wal 中日志是有管理类型的,也就是日志记录的东西是什么的标签。


    下面我们测试操作创建一个数据库,创建一个表,插入5条记录。


1.记录当前的current_wal_lsn值


halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E71B78

(1 行记录)

halo0root=#

halo0root=# create database test1;

CREATE DATABASE

halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E72D80

(1 行记录)


2.创建一个测试表t1,并记录current_wal_lsn

halo0root=# create table t1(id int);

CREATE TABLE

halo0root=#

halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E88C20

(1 行记录)



3.插入5条测试数据,并记录current_wal_lsn

halo0root=# insert into t1 values(1);

INSERT 0 1

halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E88CC0

(1 行记录)



halo0root=# insert into t1 values(2);

INSERT 0 1

halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E88D28

(1 行记录)



halo0root=# insert into t1 values(3),(4),(5);

INSERT 0 3

halo0root=# select pg_current_wal_lsn();

pg_current_wal_lsn

--------------------

0/1E88E48

(1 行记录)



4.查询当前操作结束的lsn 号,以及pg_wal 的文件名。

halo0root=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());

pg_current_wal_lsn | pg_walfile_name | pg_walfile_name_offset

--------------------+--------------------------+-------------------------------------

0/1E88E80 | 000000010000000000000001 | (000000010000000000000001,15240832)



5.查看pg_wal 日志中记录的建库,建表和插入的操作

pg_waldump /data/halo/pg_wal/000000010000000000000001 -s 0/1E71B78

可以在日志中,查到此创建database的sql语句

rmgr: Database len (rec/tot): 42/ 42, tx: 3109, lsn: 0/01E724F8, prev 0/01E72480, desc: CREATE copy dir 1663/1 to 1663/17652



6.使用oid2name查看新建的数据库test1 的oid为17652 ,与日志里记录的oid相对应。

halo@localhost pg_wal]$ oid2name

All databases:

Oid Database Name Tablespace

----------------------------------

14506 halo0root pg_default

14505 template0 pg_default

1 template1 pg_default

17648 test pg_default

17652 test1 pg_default



7.继续查看日志中建表的相关信息

rmgr: Storage len (rec/tot): 42/ 42, tx: 0, lsn: 0/01E72D80, prev 0/01E72D48, desc: CREATE base/14506/17653



8.可以在日志中看到刚刚执行的插入的5条测试数据和提交动作

rmgr: Heap len (rec/tot): 59/ 59, tx: 3111, lsn: 0/01E88C20, prev 0/01E88BE8, desc: INSERT+INIT off 1 flags 0x00, blkref #0: rel 1663/14506/17653 blk 0

rmgr: Transaction len (rec/tot): 34/ 34, tx: 3111, lsn: 0/01E88C60, prev 0/01E88C20, desc: COMMIT 2023-05-29 14:51:47.670482 CST

rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/01E88C88, prev 0/01E88C60, desc: RUNNING_XACTS nextXid 3112 latestCompletedXid 3110 oldestRunningXid 3111; 1 xacts: 3111

rmgr: Heap len (rec/tot): 59/ 59, tx: 3112, lsn: 0/01E88CC0, prev 0/01E88C88, desc: INSERT off 2 flags 0x00, blkref #0: rel 1663/14506/17653 blk 0

rmgr: Transaction len (rec/tot): 34/ 34, tx: 3112, lsn: 0/01E88D00, prev 0/01E88CC0, desc: COMMIT 2023-05-29 14:51:57.229355 CST

rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01E88D28, prev 0/01E88D00, desc: RUNNING_XACTS nextXid 3113 latestCompletedXid 3112 oldestRunningXid 3113

rmgr: Heap len (rec/tot): 59/ 59, tx: 3113, lsn: 0/01E88D60, prev 0/01E88D28, desc: INSERT off 3 flags 0x00, blkref #0: rel 1663/14506/17653 blk 0

rmgr: Heap len (rec/tot): 59/ 59, tx: 3113, lsn: 0/01E88DA0, prev 0/01E88D60, desc: INSERT off 4 flags 0x00, blkref #0: rel 1663/14506/17653 blk 0

rmgr: Heap len (rec/tot): 59/ 59, tx: 3113, lsn: 0/01E88DE0, prev 0/01E88DA0, desc: INSERT off 5 flags 0x00, blkref #0: rel 1663/14506/17653 blk 0

以上就是通过pg_waldump来解析Halo数据库的wal日志一般用法,通过观察实际上日志中主要的针对上面的操作有意义的 rmgr 为 database , storage , heap , transaction



1.记录当前的current_wal_lsn值

1) 可以在知道其实的lsn号和日志的名字的基础上进行日志分析的输出,(如上例)



2 ) 可以在不知道lsn号的情况下,进行的日志扫描,如直接将两个日志按照先后,写到命令后,直接进行两个日志及其之间的信息的打印。

pg_waldump /data/halo/pg_wal/000000010000000000000001 000000010000000000000002|more


3) 知道自己的操作主要的目标后,对需要查看的rmgr 类型进行限定

pg_waldump  /data/halo/pg_wal/000000010000000000000001  -s 0/1E71B78 -b -f -r transaction


4) pg_waldump 还有一个命令可以对当前的日志进行一个分析和汇总,这里面就包含每种数据类型所占的比例以及统计分析。

pg_waldump /data/halo/pg_wal/000000010000000000000001 000000010000000000000002  -z



















「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论