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日志中的具体操作记录信息,可用于数据库事务操作的分析和数据的恢复。

posted @ 2022-10-08 09:11  KINGBASE研究院  阅读(289)  评论(0编辑  收藏  举报