实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法技术

技术编号:32918310 阅读:24 留言:0更新日期:2022-04-07 12:09
本发明专利技术属于关系型数据库管理及操作系统技术领域,尤其涉及一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法及其用途。本方法通过改造现有的WAL回放线程,将备库回放线程工作由单独线程回放拆分为多线程并行回放,并将WAL类型区分为事务日志和非事务日志,针对事务日志,仍采用单独线程回放,以避免乱序事件的发生,针对非事务日志,采用多线程并行回放,以加快WAL回放速度。利用本方法能够使备库快速完成WAL回放,减少WAL累积,保持主库和备库WAL差值始终在设定的阈值范围之内,显著提高主从复制模式下OpenGauss数据库的对外服务能力,为数据库性能的正常发挥提供技术保障。能的正常发挥提供技术保障。能的正常发挥提供技术保障。

【技术实现步骤摘要】
实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法


[0001]本专利技术属于关系型数据库管理及操作系统
,尤其涉及一种实现 OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法及其用途。

技术介绍

[0002]OpenGauss是一款开源关系型数据库管理系统,其内核源自PostgreSQL,作为一个开源、免费的数据库平台,旨在鼓励社区贡献、合作。目前,OpenGauss 数据库已支持对预写式日志(WAL)进行流式物理复制(流复制),数据库用户可以通过流复制,实现备库过程中一边从主库接收WAL,一边回放接收到的WAL,备库持续从主库接收和回放WAL完成备库的构建和数据同步。然而,随着主库压力的增大会产生大量的WAL,备库WAL回放速度减慢导致WAL 累积,主库和备库WAL差值达到设定阈值后数据库性能将明显下降。因此,如果有一种技术方案能够使备库快速完成WAL回放,减少WAL累积,保持主库和备库WAL差值始终在设定的阈值范围之内,则可以显著提高主从复制模式下OpenGauss数据库的对外服务能力,为数据库性能的正常发挥提供有力的技术保障。

技术实现思路

[0003]为了克服OpenGauss数据库主从复制模式下备库WAL回放速度减慢导致的从机与主机数据不一致,进而降低数据库性能的缺陷,本专利技术提供了一种解决方案。本专利技术的目的是为OpenGauss数据库设计一种主从复制模式下从机快速保持与主机数据一致性方法,本方法是通过设计一套WAL并行回放方案来实现的。
[0004]具体而言,本专利技术提供了一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,本方法通过改造现有的WAL回放线程,将备库回放线程工作由单独线程回放拆分为多线程并行回放,并将WAL类型区分为事务日志和非事务日志,所述事务日志包括事务操作相关日志,所述非事务日志包括数据操作相关日志;针对事务日志,本方法仍采用单独线程回放,以避免乱序事件的发生,针对非事务日志,本方法采用多线程并行回放,以加快WAL回放速度。
[0005]进一步地,本专利技术方法中所述事务日志包括CSN(COMMIT SEQUENCENUM)日志和事务提交日志;所述非事务日志包括insert操作日志和update 操作日志。
[0006]进一步地,本专利技术方法在实施过程中,当对非事务日志采用多线程并行回放处理时,如果非事务日志之间存在依赖关系,则将依赖关系区分为事务内依赖关系和事务间依赖关系,针对不同类型的依赖关系,采用下述不同的处理方法:
[0007](1)针对事务内依赖关系,当一个事务内存在对同一操作对象多次操作的 WAL时,并行回放时根据从WAL信息中获取到的标识该操作对象物理位置的数字标号计算回放此日志的工作线程编号,由于标识操作对象物理位置的数字标号具有唯一性,从而保证了包含同一操作对象的所有非事务日志都由同一个工作线程回放;
[0008](2)针对事务间依赖关系,对并行回放的WAL进行封装,并在封装结构中保存相关的标记信息,同时在数据库内核中设置WAL类型和分派函数映射关系,针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系。
[0009]进一步地,上述处理方法(2)针对事务间依赖关系中所述针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系,具体包括以下处理方式:
[0010](1)当WAL的类型为RM_HEAP_ID时,对应的分派函数为 DispatchHeapRecord,DispatchHeapRecord根据WAL是否涉及数据块改动来决定该WAL由哪个REDO_BATCH线程回放:
[0011](a)若max_bloc_id>=0,表明涉及数据块改动,遍历每个数据块,依据数据块的物理文件OID来选择分组,保证物理文件OID相同的WAL由同一个工作线程回放;
[0012](b)若max_block_id<0,表明不涉及数据块改动,则将WAL分派给多个工作线程并行回放;
[0013](2)当WAL的类型为RM_STANDBY_ID时,对应的分派函数为 DispatchStandbyRecord,DispatchStandbyRecord将此WAL分派给 REDO_TRXN_MNG线程回放;
[0014](3)当WAL的类型为RM_XACT_ID时,对应的分派函数为 DispatchXactRecord,DispatchXactRecord首先判断此WAL是否会删除文件:
[0015](a)如果会删除文件,则将此WAL分派给所有的REDO_BATCH线程回放;
[0016](b)如果不删除文件,则将此WAL分派给REDO_TRXN_MNG线程回放。
[0017]优选地,本专利技术实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,包括以下步骤:
[0018](1)日志接收线程将主库发送过来的WAL写入磁盘;
[0019](2)由Startup线程从磁盘读取WAL,并将WAL区分为事务日志和非事务日志,其中:
[0020](a)事务日志由REDO_TRXN_WORKER线程单独回放,
[0021](b)非事务日志由多线程并行回放;
[0022](3)针对非事务日志,根据非事务日志的类型调用不同的分派函数,分派函数对非事务日志进行分派,将其放入对应的REDO_PAGE_WORKER线程的 SPSC队列中,如果队列已满,则Startup线程会循环等待;
[0023](4)由REDO_PAGE_WORKER线程从SPSC队列中读取非事务日志后进行回放,并更新本线程已经回放的非事务日志的位置;
[0024](5)由Startup线程获取REDO_PAGE_WORKER线程已经回放的非事务日志的最小值,判断事务日志能否回放,如果可以则调用对应的回放函数。
[0025]此外,本专利技术还涉及上述实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法在关系型数据库管理或操作系统中的用途。
[0026]综上,本专利技术首次提出了一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,本方法通过设计一套WAL并行回放方案,很好地克服了OpenGauss数据库主从复制模式下备库WAL回放速度减慢导致的从机与主机数据不一致,进而降低数据库性能的缺陷。利用本方法能够使备库快速完成WAL回放,减少WAL累积,保持主库和备库WAL差值始终在设定的阈值范围之内,通过主从模式下进行的压测,结果显示开启
WAL并行回放后数据库性能明显优于未开启状态,本方法WAL并行回放策略可显著提高主从复制模式下OpenGauss数据库的对外服务能力,为数据库性能的正常发挥提供有力的技术保障。
附图说明
[0027]为了更清楚地说明本专利技术实本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,其特征在于,本方法通过改造现有的WAL回放线程,将备库回放线程工作由单独线程回放拆分为多线程并行回放,并将WAL类型区分为事务日志和非事务日志,所述事务日志包括事务操作相关日志,所述非事务日志包括数据操作相关日志;针对事务日志,本方法仍采用单独线程回放,以避免乱序事件的发生,针对非事务日志,本方法采用多线程并行回放,以加快WAL回放速度。2.根据权利要求1所述的实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,其特征在于,所述事务日志包括CSN日志和事务提交日志;所述非事务日志包括insert操作日志和update操作日志。3.根据权利要求1所述的实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,其特征在于,当对非事务日志采用多线程并行回放处理时,如果非事务日志之间存在依赖关系,则将依赖关系区分为事务内依赖关系和事务间依赖关系,针对不同类型的依赖关系,采用下述不同的处理方法:(1)针对事务内依赖关系,当一个事务内存在对同一操作对象多次操作的WAL时,并行回放时根据从WAL信息中获取到的标识该操作对象物理位置的数字标号计算回放此日志的工作线程编号,由于标识操作对象物理位置的数字标号具有唯一性,从而保证了包含同一操作对象的所有非事务日志都由同一个工作线程回放;(2)针对事务间依赖关系,对并行回放的WAL进行封装,并在封装结构中保存相关的标记信息,同时在数据库内核中设置WAL类型和分派函数映射关系,针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系。4.根据权利要求3所述的实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,其特征在于,处理方法(2)针对事务间依赖关系中所述针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系,具体包括以下处理方式:(1)当WAL的类型为RM_HEAP_ID时,对应的分派函数为DispatchHeapRecord,DispatchHeapRecord根据WAL是否涉及数据块改动来决定该WAL由哪个REDO_BA...

【专利技术属性】
技术研发人员:秋明明黄晓涛
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1