KingbaseES V8R6运维案例之---sys_waldump解析wal日志
案例说明:
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日志的更多相关文章
- KingbaseES通过sys_waldump解析wal日志
前言 oracle中的redo日志我们无法直接读取,然而对于KingbaseES数据库,我们可以利用sys_waldump工具解析wal日志,查看wal日志记录的信息. 我们可以利用 sys_wald ...
- KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复
案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...
- KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障
案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- 运维案例 | Exchange2010数据库损坏的紧急修复思路
关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...
- KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份
案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...
- KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份
案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...
- KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份
案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...
- KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析
案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
随机推荐
- junit使用mock objects进行单元测试
上一篇我介绍了使用stub进行单元测试.那么mock objects和stub有何区别?什么情况下使用mock objects呢? 下面摘自junit in action书中的解释: mock obj ...
- 《深入理解Java虚拟机》(八) 记录一次OOM问题分析实战
目录 一.问题分析思路 二.主要问题概述以及分析 1.相关操作 2.主要问题现象 3.初步分析问题 三.相关工具介绍 四.实际问题快照分析 1.通过Memory查看老年代内存占用情况 2.选择Live ...
- java轻量级规则引擎easy-rules使用介绍
我们在写业务代码经常遇到需要一大堆if/else,会导致代码可读性大大降低,有没有一种方法可以避免代码中出现大量的判断语句呢? 答案是用规则引擎,但是传统的规则引擎都比较重,比如开源的Drools,不 ...
- 内建函数iter(),第三个参数哨兵用法
循环读取文件常见写法 CHUNKSIZE=8192 def reader(s): while True: data = s.recv(CHUNKSIZE) if data == b'': break ...
- python模块Configparser读取 ini(cfg,txt)等配置文件
一个ini文件的组成: 一个ini文件是由多个section组成,每个section中以key=vlaue形式存储数据: 示例 # 安装 pip install ConfigParser # 1.导包 ...
- ABP的版本升级,从7.2.2升级到7.2.3
1.升级ABP CLI 见前面的文章:ABP开发需要用到的命令 更新最新版本: ~~~ dotnet tool update -g Volo.Abp.Cli ~~~ 2.升级ABP Suite 见前面 ...
- .NET开源功能强大的串口调试工具
前言 今天大姚给大家分享一款.NET开源的.功能强大的串口调试工具:LLCOM. 工具介绍 LLCOM是一个.NET开源的.功能强大的串口调试工具.支持Lua自动化处理.串口调试.串口监听.串口曲线. ...
- 【转载】大数据OLAP系统--开源组件方案对比
开源大数据OLAP组件,可以分为MOLAP和ROLAP两类.ROLAP中又可细分为MPP数据库和SQL引擎两类.对于SQL引擎又可以再细分为基于MPP架构的SQL引擎和基于通用计算框架的SQL引擎: ...
- P2251 质量检测(分块线段树RMQ单调队列)
P2251 质量检测 正解应该是ST表和单调队列,不过对于这道题来说只有查询没有修改,这里我还是想用线段树和分块来写,不得不说分块是真好,优雅的暴力 线段树版本: #include <bits/ ...
- Scyther 协议形式化验证翻译 (第二章)
论文概述:$\alpha +\forall (\sum \oint_{3}^{4})$ 第二章: 操作语义 在第二章中我提出了一种新的安全协议的模型,用于定义安全协议以及协议的行为,在明确的模型中执 ...