暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

通过pg_waldump 来分析Halo wal日志

原创 贾桂军 2023-10-12
30409

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


9.pg_waldump 多种组合解析查询方式

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论