KingbaseES V8R6 中walminer的使用

前言

walminer工具可以帮助dba挖掘wal日志中的内容,看到某时间对应数据库中的具体操作。例如挖掘日志后可以看到数据库某时间有哪些dml语句。

walminer的限制与约束

  • WalMiner工具的使用必须以数据库超级用户执行。
  • 数据库能正常运行。
  • full_page_writes必须为开启状态。
  • 拥有完整连续的WAL日志。
  • 能导出正常使用的数据字典。
  • 解析过程中,日志所需数据字典没有发生改变。
  • 不支持DDL的解析。

解析wal日志

测试环境为KESV8R6C007

1.解析本库WAL日志无需添加日志和数据字典

创建扩展
TEST=# create extension walminer;
CREATE EXTENSION

按时间范围解析
TEST=# select walminer_by_time('2023-04-09 11:27:00', '2023-04-10 11:37:00');
NOTICE:  Add wal from current pg_wal directory, do not suggest use this way in produce
NOTICE:  Switch wal to 000000010000000100000078 on time 2023-04-10 15:54:17.088751+08
  walminer_by_time
---------------------
 pg_minerwal success
(1 row)

普通解析
TEST=# select walminer_all();


LSN范围解析 
select walminer_by_lsn('0/010000A0', '0/016E6578');

单表解析 
select walminer_by_time('2023-09-08 11:27:00', '2023-09-08 11:37:00', 'false', 16452);


查看分析结果:
TEST=# select * from walminer_contents;
 sqlno | xid  | topxid | sqlkind | minerd |           timestamp           |                                    op_text                                    |                    undo_text                     |
 complete | schema | relation | start_lsn  | commit_lsn
-------+------+--------+---------+--------+-------------------------------+-------------------------------------------------------------------------------+--------------------------------------------------+
----------+--------+----------+------------+------------
     1 | 1516 |      0 |       1 | t      | 2023-03-31 15:22:05.701811+08 | INSERT INTO public.u1(id ,info) VALUES(1 ,'ec79d8fc388c6aadb81c04890efcb587') | DELETE FROM public.u1 WHERE id=1                 |
 t        | public | u1       | 1/7898B1F8 | 1/78991750


结束分析:
select walminer_stop();

结束分析后还可以查到walminer_contents视图中相关记录,如果以后不需要查看可以truncate该视图。

异地解析wal日志的限制

1.执行了删除表、truncate表、更改表的表空间、更改表字段的类型、vacuum full,这样的DDL语句后,发生DDL语句之前的此表相关的DML语句不会再被解析。
应对措施:建议在执行表结构变更之前,先保存一份数据字典,用来保证可以解析历史wal日志。

2.解析结果依赖于数据字典。(举例:创建表t1,所有者为user1,但是中间将所有者改为user2。那解析结果中,所有t1相关操作所有者都将标示为user2)
应对措施:建议在执行表结构变更之前,先保存一份数据字典,用来保证可以准确解析历史wal日志。

3.只能解析与数据字典时间线一致的wal文件

4.不建议使用walminer解析大量copy语句(在同一个事务中插入大量数据行)产生的wal日志,
这会导致解析过程中的效率低下。

2.解析其他数据库的WAL日志 
解析其他库的日志暂不支持解析自定义数据类型,如果其他库的WAL日志中存在自定义数据类型,而本库没有对应的数据类型则会解析失败。

从其他数据库导出数据字典 
select walminer_build_dictionary('/home/kingbase/dict');
导出的数据字典名称为:dict
将生成的数据字典和需要解析的wal日志放到其他库可以获取的路径。
导入其他数据库的数据字典 
-- 导入数据字典
select walminer_load_dictionary('/home/kingbase/dict/dict');
添加日志文件 
select walminer_wal_add('/home/kingbase/sys_wal/000000010000000000000001');
日志解析,同本地wal解析方式相同,包括普通解析,时间范围解析, LSN范围解析,单表解析
-- 查看分析结果
select * from walminer_contents;
-- 结束分析,结束分析会删除分析过程中生成的中间文件、导入的数据字典、WAL日志文件以及分析结果
select walminer_stop();
3.本地wal加密方式使用walminer
wal加密后使用walminer解析时,不需要打开透明存储加密的钱夹功能,不需要加密密钥。

TEST=# CLOSEUP WALLET WITH PASSWORD "654321";
CLOSE WALLET

alter system set wal_encryption to true;
select sys_reload_conf();

TEST=# show wal_encryption ;
 wal_encryption
----------------
 on
(1 row)

TEST=# create extension walminer ;
CREATE EXTENSION
TEST=#
TEST=# select walminer_all();
NOTICE:  Add wal from current pg_wal directory, do not suggest use this way in produce
NOTICE:  Switch wal to 000000010000000100000078 on time 2023-04-10 16:38:12.105553+08
    walminer_all
---------------------
 pg_minerwal success
(1 row)

TEST=#
TEST=#  select * from walminer_contents;
 sqlno | xid  | topxid | sqlkind | minerd |           timestamp           |                                    op_text                                    |                    undo_text                     |
 complete | schema | relation | start_lsn  | commit_lsn
-------+------+--------+---------+--------+-------------------------------+-------------------------------------------------------------------------------+--------------------------------------------------+
----------+--------+----------+------------+------------
     1 | 1516 |      0 |       1 | t      | 2023-03-31 15:22:05.701811+08 | INSERT INTO public.u1(id ,info) VALUES(1 ,'ec79d8fc388c6aadb81c04890efcb587') | DELETE FROM public.u1 WHERE id=1                 |
 t        | public | u1       | 1/7898B1F8 | 1/78991750

总结

在KingbaseESV8R6C7中支持walminer日志挖掘,此功能插件有些功能限制需要注意,例如支持DDL语句的挖掘。

在本地测试加密wal日志不需要对应解密密钥就可以使用walminer挖掘日志。

posted @ 2023-05-19 15:19  KINGBASE研究院  阅读(171)  评论(0编辑  收藏  举报