带你认识数仓的增量备份核心设计

认识,增量,备份,核心,设计 · 浏览次数 : 170

小编点评

**增量备份设计** **Introduction** 增量备份是计算机系统备份的重要常规策略,它可快速识别增量变化文件的相关信息,提升增量备份效率。本文介绍华为云社区《其疾如风,GaussDB(DWS)增量备份核心设计》,作者: 我的橘子呢,分享其对GaussDB增量备份核心设计的相关知识。 **增量备份工具 Roach** Roach是GaussDB增量备份工具的核心组件,可提供集群级增量备份。全量备份会将源数据完整备份,而增量备份仅将上次备份后所作的更改进行备份。 **增量备份类型** * 累积增量备份:每次全量备份后的多次增量备份,指定的 `prior-backup-key`始终为上次备份的 `backup-key`,即所有增量备份都是基于上次备份进行的。 * 差异增量备份:每次全量备份后的多次增量备份,指定的 `prior-backup-key`均为上一次备份(可能是全量备份也可能增量备份)的 `backup-key`,即此次备份是基于上一次备份集来进行的。 **CBM设计** CBM(Change Based Maintenance)是一种高效的增量备份设计,它基于事务日志和WAL(Write Ahead Logging)技术,快速识别增量期间数据文件的变化信息。 **WAL 和事务日志** WAL记录每个数据变更的详细操作信息,并在系统故障发生时进行恢复时被使用。事务日志记录了所有与事务相关的操作,以便在恢复过程中进行数据恢复。 **CBM 的工作原理** CBM基于以下步骤进行增量备份: 1. 解析 xlog 文件,识别增量期间数据文件的变化信息。 2. 使用 WAL 和事务日志记录这些变化信息。 3. 构建 CBM 文件,包含增量数据的文件列表。 4. 将 CBM 文件写入数据文件中。 **CBM 的优点** * 快速恢复数据:由于 CBM 只包含增量数据,因此恢复过程更快。 * 降低磁盘使用率:仅备份增量数据,可以有效降低磁盘使用率。 * 提高备份效率:通过缓存数据, CBM 可以加速增量备份。 **结论** 增量备份是重要的常规备份策略,CBM是一种高效的增量备份设计,可帮助提高增量备份效率。

正文

摘要:增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。

本文分享自华为云社区《其疾如风,GaussDB(DWS)增量备份核心设计》,作者: 我的橘子呢 。

1、认识增量备份

GaussDB(DWS)数仓的备份恢复工具Roach支持集群级增量备份。全量备份会将源数据完整备份,而增量备份仅将上次备份后所作的更改进行备份,这里的上次备份可以使全量备份,也可以是全量备份后的增量备份。需要注意的是,增量备份的基础始终是全量备份,如果一次全量备份之后进行了全量恢复,则不能再基于该全量备份进行增量备份,必须重新进行全量备份然后基于新的全量备份进行增量备份。增量备份分为两种:累积增量备份和差分增量备份。

累积增量备份:如果一次全量备份后的多次增量备份,指定的prior-backup-key始终为全量备份的backup-key,即所有的增量备份都是基于全量备份来进行的,那么这些增量备份就是累积增量备份,累积增量备份均是基于最近一次全量备份进行的,如图1所示。

图1 累积增量备份示意图

差分增量备份:如果一次全量备份后的多次增量备份,指定的prior-backup-key均为上一次备份(可能是全量备份也可能增量备份)的backup-key,即此次备份是基于上一次备份集来进行的,那么这些增量备份就是差分增量备份,差分增量备份均是基于最近一次备份进行的,如图2所示。

图2 差分增量备份示意图

2、增量备份之CBM设计

增量备份只需要备份上一备份节点到当前时间发生变化的数据文件,为了实现备份数据的完整性与一致性,正确识别并备份增量数据文件是至关重要的,作为增量备份的核心设计,Gauss数据库内核的事务日志功能与cbm设计可以帮助Roach工具快速准确识别增量期间数据文件的变换信息,为快速准确完成增量备份提供了有力保障。

(1)WAL与事务日志

为了保证数据的一致性和完整性,在对数据进行相关操作之前都会将具体的操作记录下来,持久化到可靠存储中,然后再进行具体的数据操作,这就是所谓的WAL(Write Ahead Logging),记录的相关操作称为XLOG日志,每一条日志记录都由LSN进行唯一标识。这样做的好处是事物的记录被提前记录并保存起来,在因一些外部原因(比如断电、操作系统失败等)导致操作失败后,我们可以通过保存的事物日志将这些操作重新执行一遍,保证数据不会丢失。相关操作如图3所示。

图3 WAL操作示意图

(2)Checkpoint操作

当系统运行时间较长的时候,由于操作较多,日志文件的数量也较多。如果每次利用日志进行恢复操作都会耗费大量的时间,为了节约时间同时减少不必要的恢复操作,引入了checkpoint的概念。checkpoint表示在此操作之前,相关数据已经被保存到永久存储中,即使系统故障,这部分数据也不会丢失,因此恢复的时候只要从checkpoint操作之后根据日志执行恢复操作就可以了。checkpoint本身也是一条xlog记录,该记录包含了redo点的位置,因此,每次恢复数据时,先从xloh记录里找到最近的一次checkpoint记录,并根据该记录找到相应的redo点位置,这就是执行本次恢复的起始点位置。如图4所示,checkpoint操作记录了redo点的位置。

图4 Checkpoint操作示意图

(3)CBM设计

基于上述功能,由于数据的所有变化都被记录在了xlog中,Gauss数据库内核通过增加常驻的CBM writer线程,持续不断地对新增的xlog进行解析,识别并记录哪些数据数据页面被修改。CBM记录的生成过程如图5所示。

图5 CBM生成示意图

CBM writer线程的工作流程为:

  • 进程启动时即开启CBM writer功能
    在startup线程刚启动时,其根据已经解析出来的CBM文件,来决定CBM writer开始解析的起始LSN位置。每次执行到checkpoint末尾是,会设置CBM writer线程的latch。CBM writer线程等待latch被设置,然后进行一轮日志解析。
  • 通过动态reload GUC参数,开启CBM writer功能
    由于是动态开启的CBM writer功能,因此startup线程没有初始化CBM解析的起始位置。打开enable_cbm_writer开关的同时,会将CBM强制初始化的标志置为true。当CBM writer线程启动之后,其第一次解析中,会强制初始化获得解析的起始lsn。

(4)CBM文件的命名格式

CBM文件保存在data目录的pg_cbm文件夹下,命名方式为:pg_xlog_seqnum_startlsn_endlsn.cbm。如图6所示。

图6 CBM文件格式

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

(5)CBM对外接口函数

a. pg_cbm_tracked_location

  • 说明:用于查询cbm已经解析到的lsn位置
  • 入参:无
  • 返回值:cbm已经解析到的lsn位置

b. pg_cbm_get_merged_file

  • 说明:用于将指定lsn范围之内的cbm文件合并成一个cbm文件
  • 入参:startlsn,指定的起始lsn;endlsn,指定的结束lsn
  • 返回值:合并完的cbm文件名

c. pg_cbm_get_changed_block

  • 说明:用于将指定lsn范围之内的cbm文件合并一个表,并返回表的各行记录
  • 入参:startlsn,指定的起始lsn;endlsn,指定的结束lsn
  • 返回值:合并完的表的记录,表的结构如下

d. pg_cbm_recycle_file

  • 说明:删除不再使用的cbm文件
  • 入参:lsn,删除该lsn以前的cbm文件
  • 返回值:删除截止的lsn

3、CBM使用实践

(1)找到当前xlog的LSN位置,并将cbm的解析位置设置为该LSN的位置。

图7 设置CBM解析起始位置

(2)插入数据后获取当前cbm解析位置。

图8 设置CBM解析终止位置

(3)根据插入后数据前后的CBM解析位置,获取变化的数据文件,获取相关信息。

图9 获取变化数据文件

4、总结

增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。作为增量备份的核心设计,事务日志和CBM相关功能为增量备份的快速高效进行提供了有力支撑,本文对CBM的相关设计进行了介绍,并利用CBM的对外接口演示了CBM的相关功能。

 

点击关注,第一时间了解华为云新鲜技术~

与带你认识数仓的增量备份核心设计相似的内容:

带你认识数仓的增量备份核心设计

摘要:增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。 本文分享自华为云社区《其疾如风,GaussDB(DWS)增量备份核心设计》,作者: 我的橘子呢 。 1、认识增量备份 GaussDB(DWS)数仓的备份恢复工具Roach支持集群级增量备份。全量备份会将源数据

带你认识数仓的监控系统TopSQL

TopSQL为DWS的监控系统,记录DWS中各个作业、算子级别的资源使用数据、耗时数据,包括下盘信息、内存、网络、耗时、警告、基础信息等作业执行的数据。

带你认识JDK8中超nice的Native Memory Tracking

摘要:从 OpenJDK8 起有了一个很 nice 的虚拟机内部功能: Native Memory Tracking (NMT)。 本文分享自华为云社区《Native Memory Tracking 详解(1):基础介绍》,作者:毕昇小助手。 0.引言 我们经常会好奇,我启动了一个 JVM,他到底会

带你认识3个J.U.C组件扩展

摘要:本文主要为大家讲解3种J.U.C组件扩展。 本文分享自华为云社区《【高并发】J.U.C组件扩展》,作者: 冰 河。 1.FutureTask FutureTask是J.U.C(java.util.concurrent)下的,但不是AQS(AbstractQueuedSynchronizer)的

[转帖]JVM参数:带你认识-X和-XX参数

https://www.cnblogs.com/huaweiyun/p/17095557.html 摘要:JVM参数分为三类:标准参数、非标准参数(-X参数)和高级选项(-XX参数)。本文主要为大家讲解-X参数和-XX参数。 本文分享自华为云社区《JVM运行参数之-X和-XX参数》,作者:共饮一杯无

JVM参数:带你认识-X和-XX参数

摘要:JVM参数分为三类:标准参数、非标准参数(-X参数)和高级选项(-XX参数)。本文主要为大家讲解-X参数和-XX参数。 本文分享自华为云社区《JVM运行参数之-X和-XX参数》,作者:共饮一杯无 。 JVM参数分为三类:标准参数、非标准参数(-X参数)和高级选项(-XX参数)。本文主要为大家讲

3层结构+7大特点,带你认识华为云IoTEdge

摘要:华为云IoTEdge三层架构联合打造的IoT边缘平台功能,持续为更多企业和开发者带来价值。 本文分享自华为云社区《【华为云IoTEdge学习笔记】华为云IoT边缘功能特点及价值》,作者:华为IoT云服务 。 IoT边缘是一组软件产品,包含云服务、边缘运行时软件、边缘模块应用,将云端能力快速拓展

5大特性,带你认识化繁为简的华为云CodeArts Deploy

摘要:2月27日,华为云发布持续部署服务CodeArts Deploy,通过模块化自由编排部署流程,实现软件的自动化部署,帮助企业软件产品的快速、高效、高质量交付。 本文分享自华为云社区《化繁为简高效部署 华为云发布部署服务CodeArts Deploy》,作者:华为云头条。 随着互联网、数字化的发

用案例带你认识决策树,解锁洞察力

决策树是一种基于树形结构的分类模型,它通过对数据属性的逐步划分,将数据集分成多个小的决策单元。

Python从0到1丨带你认识图像平滑的三种线性滤波

摘要:常用于消除噪声的图像平滑方法包括三种线性滤波(均值滤波、方框滤波、高斯滤波)和两种非线性滤波(中值滤波、双边滤波),本文将详细讲解三种线性滤波方法。 本文分享自华为云社区《[Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)》,作者:eastmount。