KingbaseES V8R6运维案例之---wal日志解析DDL操作
案例说明:
通过sys_waldump解析DDL操作,获取DDL操作的日志条目具体内容。
适用版本:
KingbaseES V8R3/R6
一、DDL事务操作对应的wal日志文件
# 查看当前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解析日志
[kingbase@node101 bin]$ ./sys_waldump /data/kingbase/r6ha/data/sys_wal/0000001D000000040000005C -s 4/5C003C70
2、分析“create database”操作日志
test=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C003C70
(1 row)
test=# create database prod1;
CREATE DATABASE
1)如下图所示,“create database”事务对应的rmgr:Database,xid:288,操作类型:create,并从template0模板创建prod1数据库(copy),数据库oid:189186。
2)rmgr:XLOG,操作类型:CHECKPOINT_ONLINE,记录checkpoint对应的日志。fpw true:开启full page write。
3)rmgr:Transaction,操作类型:commit,xid为2882的事务提交,将日志条目从wal buffer同步(sync)到磁盘。
4)rmgr:Standby记录事务的状态信息。
3、分析“ create table”操作日志
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)
1)如下所示:rmgr:Storage对应的表创建,对应的操作:Create,lsn:4/5C004730,xid:2883,filenode:base/189186/189187。
2)创建表后,将更新系统表和视图及系统表的索引。在创建表后的日志条目里记录了对系统表、视图及索引的操作。如rmgr: Heap、rmgr: Btree 等,操作类型:insert。
rmgr: Heap len (rec/tot): 56/ 6703, tx: 2883, lsn: 4/5C004760, prev 4/5C004730, desc: INSERT off 102 flags 0x01, blkref #0: rel 1663/189186/1247 blk 0 FPW
rmgr: Btree len (rec/tot): 55/ 8345, tx: 2883, lsn: 4/5C0061A8, prev 4/5C004760, desc: INSERT_LEAF off 793, blkref #0: rel 1663/189186/2703 blk 1 FPW
rmgr: Btree len (rec/tot): 55/ 11952, tx: 2883, lsn: 4/5C008260, prev 4/5C0061A8, desc: INSERT_LEAF off 715, blkref #0: rel 1663/189186/2704 blk 1 FPW
rmgr: Heap len (rec/tot): 56/ 8138, tx: 2883, lsn: 4/5C00B128, prev 4/5C008260, desc: INSERT off 243 flags 0x01, blkref #0: rel 1663/189186/2608 blk 14 FPW
rmgr: Btree len (rec/tot): 55/ 8783, tx: 2883, lsn: 4/5C00D110, prev 4/5C00B128, desc: INSERT_LEAF off 635, blkref #0: rel 1663/189186/2673 blk 11 FPW
rmgr: Btree len (rec/tot): 55/ 7976, tx: 2883, lsn: 4/5C00F378, prev 4/5C00D110, desc: INSERT_LEAF off 800, blkref #0: rel 1663/189186/2674 blk 17 FPW
rmgr: Heap len (rec/tot): 207/ 207, tx: 2883, lsn: 4/5C0112B8, prev 4/5C00F378, desc: INSERT off 103 flags 0x00, blkref #0: rel 1663/189186/1247 blk 0
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C011388, prev 4/5C0112B8, desc: INSERT_LEAF off 793, blkref #0: rel 1663/189186/2703 blk 1
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C0113C8, prev 4/5C011388, desc: INSERT_LEAF off 103, blkref #0: rel 1663/189186/2704 blk 1
rmgr: Heap len (rec/tot): 80/ 80, tx: 2883, lsn: 4/5C011410, prev 4/5C0113C8, desc: INSERT off 247 flags 0x00, blkref #0: rel 1663/189186/2608 blk 14
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C011460, prev 4/5C011410, desc: INSERT_LEAF off 635, blkref #0: rel 1663/189186/2673 blk 11
rmgr: Btree len (rec/tot): 55/ 10341, tx: 2883, lsn: 4/5C0114A8, prev 4/5C011460, desc: INSERT_LEAF off 1096, blkref #0: rel 1663/189186/2674 blk 7 FPW
rmgr: Heap len (rec/tot): 56/ 3340, tx: 2883, lsn: 4/5C013D28, prev 4/5C0114A8, desc: INSERT off 2 flags 0x01, blkref #0: rel 1663/189186/1259 blk 0 FPW
rmgr: Btree len (rec/tot): 55/ 7685, tx: 2883, lsn: 4/5C014A50, prev 4/5C013D28, desc: INSERT_LEAF off 729, blkref #0: rel 1663/189186/2662 blk 1 FPW
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 4/5C016870, prev 4/5C014A50, desc: RUNNING_XACTS nextXid 2884 latestCompletedXid 1543588432 oldestRunningXid 2883
rmgr: Btree len (rec/tot): 55/ 11364, tx: 2883, lsn: 4/5C0168A0, prev 4/5C016870, desc: INSERT_LEAF off 681, blkref #0: rel 1663/189186/2663 blk 1 FPW
rmgr: Btree len (rec/tot): 55/ 6292, tx: 2883, lsn: 4/5C019520, prev 4/5C0168A0, desc: INSERT_LEAF off 673, blkref #0: rel 1663/189186/3455 blk 1 FPW
rmgr: Heap len (rec/tot): 56/ 4147, tx: 2883, lsn: 4/5C01ADD0, prev 4/5C019520, desc: INSERT off 81 flags 0x01, blkref #0: rel 1663/189186/1249 blk 4 FPW
rmgr: Btree len (rec/tot): 55/ 5564, tx: 2883, lsn: 4/5C01BE08, prev 4/5C01ADD0, desc: INSERT_LEAF off 404, blkref #0: rel 1663/189186/2658 blk 8 FPW
rmgr: Btree len (rec/tot): 55/ 3969, tx: 2883, lsn: 4/5C01D3E0, prev 4/5C01BE08, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6 FPW
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01E380, prev 4/5C01D3E0, desc: INSERT off 82 flags 0x00, blkref #0: rel 1663/189186/1249 blk 4
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01E430, prev 4/5C01E380, desc: INSERT_LEAF off 405, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01E478, prev 4/5C01E430, desc: INSERT_LEAF off 360, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01E4B8, prev 4/5C01E478, desc: INSERT off 83 flags 0x00, blkref #0: rel 1663/189186/1249 blk 4
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01E568, prev 4/5C01E4B8, desc: INSERT_LEAF off 404, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01E5B0, prev 4/5C01E568, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01E5F0, prev 4/5C01E5B0, desc: INSERT off 84 flags 0x00, blkref #0: rel 1663/189186/1249 blk 4
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01E6A0, prev 4/5C01E5F0, desc: INSERT_LEAF off 407, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01E6E8, prev 4/5C01E6A0, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01E728, prev 4/5C01E6E8, desc: INSERT off 86 flags 0x00, blkref #0: rel 1663/189186/1249 blk 4
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01E7D8, prev 4/5C01E728, desc: INSERT_LEAF off 404, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01E820, prev 4/5C01E7D8, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01E860, prev 4/5C01E820, desc: INSERT off 88 flags 0x00, blkref #0: rel 1663/189186/1249 blk 4
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01E910, prev 4/5C01E860, desc: INSERT_LEAF off 408, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01E958, prev 4/5C01E910, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: XLOG len (rec/tot): 49/ 491, tx: 2883, lsn: 4/5C01E998, prev 4/5C01E958, desc: FPI_FOR_HINT , blkref #0: rel 1663/189186/1249 fork fsm blk 2 FPW
rmgr: Heap len (rec/tot): 56/ 4800, tx: 2883, lsn: 4/5C01EB88, prev 4/5C01E998, desc: INSERT off 201 flags 0x01, blkref #0: rel 1663/189186/1249 blk 27 FPW
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01FE48, prev 4/5C01EB88, desc: INSERT_LEAF off 404, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01FE90, prev 4/5C01FE48, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 175/ 175, tx: 2883, lsn: 4/5C01FED0, prev 4/5C01FE90, desc: INSERT off 202 flags 0x00, blkref #0: rel 1663/189186/1249 blk 27
rmgr: Btree len (rec/tot): 72/ 72, tx: 2883, lsn: 4/5C01FF80, prev 4/5C01FED0, desc: INSERT_LEAF off 409, blkref #0: rel 1663/189186/2658 blk 8
rmgr: Btree len (rec/tot): 64/ 64, tx: 2883, lsn: 4/5C01FFC8, prev 4/5C01FF80, desc: INSERT_LEAF off 359, blkref #0: rel 1663/189186/2659 blk 6
rmgr: Heap len (rec/tot): 80/ 80, tx: 2883, lsn: 4/5C020020, prev 4/5C01FFC8, desc: INSERT off 534 flags 0x00, blkref #0: rel 1663/189186/2608 blk 14
rmgr: Btree len (rec/tot): 55/ 12130, tx: 2883, lsn: 4/5C020070, prev 4/5C020020, desc: INSERT_LEAF off 712, blkref #0: rel 1663/189186/2673 blk 10 FPW
rmgr: Btree len (rec/tot): 55/ 4590, tx: 2883, lsn: 4/5C022FF0, prev 4/5C020070, desc: INSERT_LEAF off 403, blkref #0: rel 1663/189186/2674 blk 11 FPW
3)更新(update)操作前,需获取对象锁(lock),rmgr: Standby类型记录获取lock的日志条目,操作类型:Lock。
4)当表创建和系统表更新完成后,执行事务的commit。rmgr: Transaction资源类型记录事务commit操作。
5)通过wal日志记录的系统表的oid,可以获取创建表时,需要更新的系统表信息。
prod1=# select oid,relname from sys_class where oid in(1247,2703,2704,2608,2673,2674,1259,2662,2663,3455,1249,2658,2659,1249);
oid | relname
------+-----------------------------------
1247 | pg_type
2658 | pg_attribute_relid_attnam_index
2659 | pg_attribute_relid_attnum_index
2662 | pg_class_oid_index
2663 | pg_class_relname_nsp_index
3455 | pg_class_tblspc_relfilenode_index
2673 | pg_depend_depender_index
2674 | pg_depend_reference_index
2703 | pg_type_oid_index
2704 | pg_type_typname_nsp_index
1249 | pg_attribute
1259 | pg_class
2608 | pg_depend
(13 rows)
3、分析“truncate table”操作日志
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C0249F8
(1 row)
prod1=# truncate table tb1;
TRUNCATE TABLE
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024C50
(1 row)
1)如下图所示:执行‘truncate table’需要在表上获取lock,rmgr: Standby 的资源类型记录获取锁的操作,操作类型:lock。
2)‘truncate table’资源类型:rmgr: Storage,操作类型:Create,只是原对象的filenode“base/189186/189190”被更新。
3)对系统表、视图、索引进行更新。rmgr: Heap 、rmgr: Tree,操作类型:insert、update、clean等。rmgr: Heap2资源类型,对应的操作类型:CLEAN。
4)执行事务的commit,rmgr: Transaction ,操作类型:commit,并记录commit的时间戳。
4、分析“drop table”操作日志
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C024C50
(1 row)
prod1=# drop table tb1;
DROP TABLE
prod1=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/5C0251D8
(1 row)
1)如下图所示:‘drop table’和‘truncate table’一样,需要获取对象lock。rmgr: Standby资源类型对应的操作:lock。
2)将对象drop后,将会delete系统表中所有的记录。rmgr: Heap,对应的操作为:DELETE
3)drop table后,完成事务的commit;rmgr: Transaction,对应的操作为:COMMIT。
5、分析“create |drop tablespace”操作日志
# 删除表空间操作
prod=# drop tablespace users;
DROP TABLESPACE
prod=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/66006700
(1 row)
# 创建自定义表空间
prod=# create tablespace user_tbs1 location '/data/kingbase/tbs/users';
CREATE TABLESPACE
prod=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
4/66006AA8
(1 row)
test=# select oid,* from sys_tablespace where spcname='user_tbs1';
oid | oid | spcname | spcowner | spcacl | spcoptions
--------+--------+-----------+----------+--------+------------
189205 | 189205 | user_tbs1 | 10 | |
(1 row)
1)如下图所示:‘drop tablespace’对应的资源类型:rmgr: Tablespace,操作类型为:DROP,记录表空间oid。执行完成后,立刻commit。
2)记录系统表更新操作,rmgr: Heap 、Tree,操作类型:INSERT、INSERT_LEAF
3)‘create tablespace’对应的资源类型:rmgr: Tablespace,操作类型:CREATE,创建完成后,事务commit。
三、总结
通过对wal日志的解析,可以加深DDL事务操作的理解及获取事务在wal日志中的具体操作记录信息,可用于数据库事务操作的分析和数据的恢复。
KingbaseES V8R6运维案例之---wal日志解析DDL操作的更多相关文章
- KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复
案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...
- 【运维工具】logrotate 日志管理神器
服务器经常会产生各种各样的日志文件,我们需要定期清理 日志的分类 系统日志 应用日志 系统日志 例如系统的history 历史信息 crontab的运行日志 一般系统日志系统都帮我们运维好了,不 ...
- Nginx-Tomcat 等运维常用服务的日志分割-logrotate
目录 一 .Nginx-Tomcat 等常用服务日志分析 Nginx 日志 Tomcat日志 MongoDB 日志 Redis 日志 二 .日志切割服务 logrotate 三.日志切割示例 Ngin ...
- KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障
案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份
案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...
- KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份
案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...
- KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份
案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...
- 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)
我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方 对 ...
随机推荐
- Spring Boot图书管理系统项目实战-2.项目搭建
导航: pre: 1.系统功能和架构介绍 next:3.用户登录 只挑重点的讲,具体的请看项目源码. 1.项目源码: 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.添加依赖 <depe ...
- Oracle 表压缩(Table Compression)技术介绍
Oracle 表压缩(Table Compression)介绍 1.官方文档说法: As your database grows in size, consider using table compr ...
- r0tracer 源码分析
使用方法 修改r0tracer.js文件最底部处的代码,开启某一个Hook模式. function main() { Java.perform(function () { console.Purple ...
- 【Android 逆向】apk反编译后重打包
1. 执行 apktool b smali_dir smali_dir 为反编译出来的数据目录 执行后可能会报错 I: Building resources... W: /root/Desktop/t ...
- [BUUCTF][Web][极客大挑战 2019]Secret File 1
打开靶机对应的url 右键查看网页源代码,查看到一个访问路径 /Archive_room.php 构造url访问一下 http://3bfaebad-fdfa-4226-ae0a-551f0228be ...
- 【LeetCode栈与队列#06】前K个高频元素(TopK问题),以及pair、priority_queue的使用
前 K 个高频元素 力扣题目链接(opens new window) 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = ...
- 微信小程序:接手项目,修bug
好家伙, 问题描述如下: 小程序主界面,选择快速上传会议记录 选择快速 其中,没有2022-2023第二学期,所以,新的会议记录无法上传 于是,我自愿修复这个bug 由于我们没有产品文档 我只能由 ...
- 【Azure 应用服务】App Service 通过门户配置数据库连接字符串不生效
应用设置 Application Setting 在应用服务中,应用设置是作为环境变量传递给应用程序代码的变量. 对于 Linux 应用和自定义容器,应用服务使用 --env 标志将应用设置传递到容器 ...
- Anaconda与Python环境在Windows中的部署
本文介绍在Win10电脑中,安装Anaconda环境与Python语言的方法. 在这里需要注意,本文介绍的方法是在电脑自身原本不含有Python的情况下进行的:如果大家电脑中原本就下载.安装过 ...
- [Python] 通过md5去重 筛选文件代码
这是一些代码记录 这次是帮朋友恢复硬盘,扫描到的结果包含了好多个分区,通过将分区中的数据导出发现很多文件是重复的.所以想到通过python代码去重. 首先把所有分区的图片文件都放到一个文件夹A中,如果 ...