案例说明:

wal日志文件记录了,事务操作的redo日志信息,由于wal日志文件是二进制文件,无法直接读取其文件内容。sys_waldump 可以解决这个问题,通过sys_waldump来解析wal 日志来分析和解决一些问题。例如在用户误操作时,可以通过解析wal日志,获取到事务操作的具体时间、xid等,用于建立基于PITR的恢复操作的基线。

Wal日志被划分为多个类型的资源管理器(RMGR),每个资源管理器只需要负责与自己相关的日志处理(抽象出操作函数,不同的日志应用使用不同的操作函数)。

如下图所示:RMGR结构

适用版本:

KingbaseES V8R3/R6

一、查看wal日志RMGR信息

=如下所示:不同的RMGR对应不同对象的操作日志。=

[kingbase@node101 bin]$ ./sys_waldump --rmgr=list

XLOG                 :和xlog相关的事务日志,包括checkpoint、日志切换等。
Transaction :和事务相关的事务日志,比如事务提交、回滚、两阶段提交等。
Storage : 存储文件的操作的操作,比如create table、truncate table等。
CLOG : 和事务提交相关的事务日志,事务提交会在clog中记录事务的状态。
Database :和数据库相关的操作,比如create database等。
Tablespace :和表空间操作相关产生的事务日志,比如create tablespace等。
TablespaceEnc :和表空间操作相关产生的事务日志
MultiXact :在同一元组上加多个锁产生了MultiXact的事务日志。
RelMap :和表空间操作相关产生的事务日志
Standby :和standby相关的事务日志,比如记录锁信息,事务运行信息等,wal_level >= WAL_LEVEL_REPLICA时,会写Standby。
Heap2 : 对heap进行操作的事务日志,例如vacuum对页面的清理操作。
Heap :对heap进行操作的事务日志,比如DML操作,insert、update、delete等。
Btree :对索引进行操作的事务日志,比如对索引的更新。
Hash :对索引进行操作的事务日志,比如对索引的更新。
Gin :对索引进行操作的事务日志,比如对索引的更新。
Gist :对索引进行操作的事务日志,比如对索引的更新。
Sequence :对序列(sequence)进行操作的事务日志,比如sequence的创建。
SPGist :对索引进行操作的事务日志,比如对索引的更新。
BRIN :对索引进行操作的事务日志,比如对索引的更新。
CommitTs : 和事务提交相关的事务日志
ReplicationOrigin :和复制、热备相关的操作。
Generic :和复制、热备相关的操作。
LogicalMessage :和复制、热备相关的操作。

=如下所示:RMGR:XLOG对应了checkpoint类型的wal日志。=

二、测试案例

如下所示,在数据库执行DDL、DML事务操作,事务commit时,将对应的wal日志条目从wal_buffer写入wal日志文件,可通过sys_waldump解析wal日志文件,获取到对应操作的日志条目的内容。

# 查看当前数据库的lsn
test=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C003C70
(1 row) # 创建数据库
test=# create database prod1;
CREATE DATABASE
test=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C004280
(1 row) #创建数据库对象
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C004700
(1 row) prod1=# create table tb1 (id int,name varchar2(10));
CREATE TABLE
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024788
(1 row) # 对象执行DML操作
prod1=# insert into tb1 values (10,'tom');
INSERT 0 1
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024820
(1 row) prod1=# insert into tb1 values (20,'jerry');
INSERT 0 1
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024890
(1 row) prod1=# update tb1 set name='rose' where id=20;
UPDATE 1
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024968
(1 row) prod1=# delete from tb1 where id=20;
DELETE 1
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C0249F8
(1 row) # 对象执行DDL操作(truncate)
prod1=# truncate table tb1;
TRUNCATE TABLE
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024C50
(1 row) # 对象执行DDL操作(drop)
prod1=# drop table tb1;
DROP TABLE
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C0251D8
(1 row) # 查看当前online的wal日志文件
prod1=# 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
--------------------+--------------------------+-----------------------------------
4/5C0251D8 | 0000001D000000040000005C | (0000001D000000040000005C,152024)
(1 row) ##如上所示,当前事务操作的wal日志flush到“0000001D000000040000005C”对应的日志文件。

三、sys_waldump解析wal日志

1、sys_waldump帮助

2、执行sys_waldump解析日志

[kingbase@node101 bin]$ ./sys_waldump /data/kingbase/r6ha/data/sys_wal/0000001D000000040000005C -s 4/5C003C70

......
rmgr: XLOG len (rec/tot): 30/ 30, tx: 0, lsn: 4/5C003C70, prev 4/5C003C40, desc: NEXTOID 197378
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 4/5C003C90, prev 4/5C003C70, desc: RUNNING_XACTS nextXid 2883 latestCompletedXid 1543519344 oldestRunningXid 2882
rmgr: Heap len (rec/tot): 291/ 291, tx: 2882, lsn: 4/5C003CC0, prev 4/5C003C90, desc: INSERT off 22 flags 0x00, blkref #0: rel 1664/0/1262 blk 0
rmgr: Btree len (rec/tot): 55/ 349, tx: 2882, lsn: 4/5C003DE8, prev 4/5C003CC0, desc: INSERT_LEAF off 9, blkref #0: rel 1664/0/2671 blk 1 FPW
rmgr: Btree len (rec/tot): 55/ 340, tx: 2882, lsn: 4/5C003F48, prev 4/5C003DE8, desc: INSERT_LEAF off 20, blkref #0: rel 1664/0/2672 blk 1 FPW
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 4/5C0040B8, prev 4/5C003F48, desc: RUNNING_XACTS nextXid 2883 latestCompletedXid 1543520440 oldestRunningXid 2882
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 4/5C0040E8, prev 4/5C0040B8, desc: CHECKPOINT_ONLINE redo 4/5C0040B8; tli 29; prev tli 29; fpw true; xid 0:2883; oid 197378; multi 1; offset 0; oldest xid 867 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 2882; online
......

=如下所示,wal日志中记录的日志条目的lsn信息。=

三、sys_waldump应用案例

1、直接进行两个日志及其之间的信息的打印

[kingbase@node101 sys_wal]$ /home/kingbase/cluster/R6HA/kha/kingbase/bin/sys_waldump 0000001F000000040000006A 0000001F000000040000006B

rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 4/6A000028, prev 4/69001580, desc: CHECKPOINT_SHUTDOWN redo 4/6A000028; tli 31; prev tli 31; fpw true; xid 0:2968; oid 189209; multi 1; offset 0; oldest xid 867 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 4/6A0000A0, prev 4/6A000028, desc: RUNNING_XACTS nextXid 2968 latestCompletedXid 0 oldestRunningXid 2968
rmgr: Heap len (rec/tot): 56/ 4850, tx: 2968, lsn: 4/6A0000D0, prev 4/6A0000A0, desc: INSERT off 171 flags 0x00, blkref #0: rel 1663/32786/32886 blk 3 FPW
......

2、指定资源类型和起始lsn

[kingbase@node101 sys_wal]$ /home/kingbase/cluster/R6HA/kha/kingbase/bin/sys_waldump 0000001F000000040000006A -s 4/6A000028 -b -f -r transaction

rmgr: Transaction len (rec/tot):     34/    34, tx:       2968, lsn: 4/6A0013C8, prev 4/6A0000D0, desc: COMMIT 2022-09-23 14:57:25.783575 CST
rmgr: Transaction len (rec/tot): 34/ 34, tx: 2969, lsn: 4/6A001480, prev 4/6A0013F0, desc: COMMIT 2022-09-23 14:57:28.560264 CST
rmgr: Transaction len (rec/tot): 34/ 34, tx: 2970, lsn: 4/6A001548, prev 4/6A0014D8, desc: COMMIT 2022-09-23 15:10:40.205866 CST
rmgr: Transaction len (rec/tot): 34/ 34, tx: 2971, lsn: 4/6A001628, prev 4/6A0015A0, desc: COMMIT 2022-09-23 15:10:42.318860 CST
......

3、指定事务xid

[kingbase@node101 sys_wal]$ /home/kingbase/cluster/R6HA/kha/kingbase/bin/sys_waldump 0000001F000000040000006A -x '2971'

rmgr: Heap        len (rec/tot):    132/   132, tx:       2971, lsn: 4/6A0015A0, prev 4/6A001570, desc: INSERT off 174 flags 0x00, blkref #0: rel 1663/32786/32886 blk 3
rmgr: Transaction len (rec/tot): 34/ 34, tx: 2971, lsn: 4/6A001628, prev 4/6A0015A0, desc: COMMIT 2022-09-23 15:10:42.318860 CST

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

[kingbase@node101 sys_wal]$ /home/kingbase/cluster/R6HA/kha/kingbase/bin/sys_waldump 0000001F000000040000006A 0000001F000000040000006B -z

Type                                           N      (%)          Record size      (%)             FPI size      (%)        Combined size      (%)
---- - --- ----------- --- -------- --- ------------- ---
XLOG 16 ( 7.34) 1270 ( 7.29) 29040 ( 6.35) 30310 ( 6.38)
Transaction 14 ( 6.42) 2021 ( 11.60) 0 ( 0.00) 2021 ( 0.43)
Storage 3 ( 1.38) 126 ( 0.72) 0 ( 0.00) 126 ( 0.03)
CLOG 0 ( 0.00) 0 ( 0.00) 0 ( 0.00) 0 ( 0.00)
Database 0 ( 0.00) 0 ( 0.00) 0 ( 0.00) 0 ( 0.00)
Tablespace 0 ( 0.00) 0 ( 0.00) 0 ( 0.00) 0 ( 0.00)
TablespaceEnc 0 ( 0.00) 0 ( 0.00) 0 ( 0.00) 0 ( 0.00)
......

四、总结

wal日志通过资源管理器RMGR对不同操作类型的日志进行管理,对于wal日志可以通过sys_waldump解析其内容,获取到事务处理的具体信息:如日志条目的lsn、事务操作执行语句、事务操作对象、xid、事务commit的时间等。

下面的篇章将对具体的事务(Transaction)操作进行分析。

KingbaseES V8R6运维案例之---sys_waldump解析wal日志的更多相关文章

  1. KingbaseES通过sys_waldump解析wal日志

    前言 oracle中的redo日志我们无法直接读取,然而对于KingbaseES数据库,我们可以利用sys_waldump工具解析wal日志,查看wal日志记录的信息. 我们可以利用 sys_wald ...

  2. KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复

    案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...

  3. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  4. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  5. 运维案例 | Exchange2010数据库损坏的紧急修复思路

    ​​关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...

  6. KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份

    案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...

  7. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  8. KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份

    案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...

  9. KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析

    ​ 案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...

  10. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

随机推荐

  1. c++STL用法总结

    一.vector的用法 vector<int> vet; 1.排序:sort(vet.begin(), vet.end()), 时间复杂度O(nlogn) 2.查找:if(find(vet ...

  2. Android使用SurfaceView实现签名板

    SurfaceView使用 首先创建一个SurfaceViewSign类,继承SurfaceView类,继承 SurfaceHolder.Callback和Runnable接口,代码如下: impor ...

  3. win32 - 自动开关光驱

    #include <tchar.h> #include <windows.h> #include <mmsystem.h> // for MCI functions ...

  4. Vue3学习(二十)- 富文本插件wangeditor的使用

    写在前面 学习.写作.工作.生活,都跟心情有很大关系,甚至有时候我更喜欢一个人独处,戴上耳机coding的感觉. 明显现在的心情,比中午和上午好多了,心情超棒的,靠自己解决了两个问题: 新增的时候点击 ...

  5. 在Windows环境中配置使用我们搭建的DNS服务器

    1.修改网卡的设置,首选DNS用我们自己的 2.在命令行中测试 专业的nslookup 3.已知的问题 每次在DNS服务器的web界面中,修改了解析,必须用docker restart dns命令,把 ...

  6. 【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?

    问题描述 PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢? 问题解答 经过查询Azure App Service官方文档,可能通过在项目根目录下添加.h ...

  7. Alertmanager钉钉告警

    一.部署alertmanager 1.1 创建目录 mkdir -p /deploy/app/alertmanager/config chmod -R 777 /deploy/app/alertman ...

  8. 10、zookeeper的leader选举

    leader选举 服务器状态 looking:寻找leader状态.当服务器处于该状态时,它会认为当前集群中没有leader,因此需要进入leader选举状态 following:跟随着状态.表明当前 ...

  9. 如何将应用一键部署至多个环境?丨Walrus教程

    在 Walrus 平台上,运维团队在资源定义(Resource Definition)中声明提供的资源类型,通过设置匹配规则,将不同的资源部署模板应用到不同类型的环境.项目等.与此同时,研发人员无需关 ...

  10. Codeforces Round #851 (Div. 2) 题解

    Codeforces Round #851 (Div. 2) 题解 A. One and Two 取 \(\log_2\),变成加号,前缀和枚举 \(s[i]=\dfrac{s[n]}{2}\). B ...