增量备份中的cbm设计

举报
不熄火 发表于 2021/06/04 10:15:04 2021/06/04
【摘要】 内核提供cbm(changed block map)功能,对外提供数据页面的修改情况,并向提供外部接口,根据cbm信息可直接获取两次备份之间发生对于数据文件(行存、列存)的增量修改信息,并备份。

内核提供cbmchanged block map)功能,对外提供数据页面的修改情况,并向提供外部接口,根据cbm信息可直接获取两次备份之间发生对于数据文件(行存、列存)的增量修改信息,并备份。

实现原理:

数据库所有的增量修改都会记录在xlog中,通过新增的cbm writer常驻线程,持续解析新增xlog,识别并记录下哪些数据页面被修改。


1、Cbm writer工作流程:

需要开启cbm writer功能

1)进程启动时即开启cbm writer功能

        在startup线程刚启动时,其根据已经解析出来的cbm文件,来决定cbm writer开始解析的起始lsn位置。然后,每次执行到checkpoint末尾时,会设置cbm writer线程的latch。cbm writer线程一直在一个死循环中等待latch被设置,然后进行一轮日志解析。第一次解析时,由于Startup线程已经确定了解析起始的lsn位置,所以不需要强制初始化。如果解析失败,那么这次解析的截止lsn将作为下次解析的起始lsn,并且下一次解析之前不需要进行强制初始化;如果解析失败,那么下次解析前需要进行强制初始化,用于重新确定解析的起始位置。每次解析的截止位置为唤醒本次解析的checkpoint的redo位置。

(2)通过动态reload GUC参数,开启cbm writer功能

        由于是动态开启的cbm writer功能,因此startup线程没有初始化cbm解析的起始位置。postmaster在打开enable_cbm_writer开关的同时,会将cbm强制初始化的标志置为true。当cbm writer线程启动之后,其第一次解析的循环中,首先会强制初始化获得解析的起始lsn。后续流程和场景一相同。

(3)cbm强制初始化逻辑

2、cbm文件格式

cbm文件保存在data目录的pg_cbm文件夹下,命名方式为:pg_xlog_seqnum_startlsn_endlsn.cbm

其中,seqnum表示这是第几个cbm文件,当一个cbm文件的大小超过100M时,将会切换到下一个cbm文件,并将seqnum1,startlsn为本cbm文件内容对应xlog记录的起始lsnendlsn为本cbm文件切换时最后一次解析的截止lsn。若一个cbm文件还没有切换,那么endlsn0

3、cbm文件页面格式和记录内容

    cbm文件由cbm页面组成,每个cbm页面的大小为8K

    在每个cbm页面的开头,为cbm页面头结构,剩下的空间均为记录对应表文件物理页面是否修改的bitmap。


4、查询使用

1)通过设置GUC参数enable_cbm_tracking=on/off,打开/关闭cbm tracking功能;

2)行存增量文件的识别

在备份行存增量文件时,通过调用函数

select * from pg_cbm_get_changed_block(startlsn, endlsn) where relfilenode != 0 and fork_number >= 0 and fork_number <= 2;

来获取上次备份以来,行存数据页面的修改。其中,startlsn为上次备份结束时checkpointlsn位置。endlsn为本次增量备份开始时checkpointlsn位置

3)识别表空间路径和数据库路径的变化

通过调用函数

pg_cbm_get_changed_block(startlsn, endlsn0 where (tablespace_oid != 0 or database_oid != 0) and relfilenode =0;

来获取上次备份以来,表空间路径和数据库路径的变化。其中,startlsn为上次备份结束时的checkpointlsn位置,endlsn为本次增量备份开始时checkpointlsn位置。

4)列存增量文件的识别

在备份列存增量文件时,通过调用函数

select * from pg_cbm_get_changed_block(startlsn, endlsn) where relfilenode != 0 and fork_number >= 4;

来获取上次备份以来,行存数据页面的修改。其中,startlsn为上次备份结束时的checkpointlsn位置,endlsn为本次增量备份开始时checkpointlsn位置。


此外,开启内核cbm tracking功能,在典型tpcc场景下,会对性能有一定影响(2%以内),可以通过调大checkpoint间隔来降低性能影响。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。