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

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

Info

Publication number
CN114281833A
CN114281833A CN202111592861.XA CN202111592861A CN114281833A CN 114281833 A CN114281833 A CN 114281833A CN 202111592861 A CN202111592861 A CN 202111592861A CN 114281833 A CN114281833 A CN 114281833A
Authority
CN
China
Prior art keywords
wal
transaction
thread
playback
logs
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202111592861.XA
Other languages
English (en)
Other versions
CN114281833B (zh
Inventor
秋明明
黄晓涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Mass Database Technology Co ltd
Original Assignee
Guangzhou Mass Database Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Mass Database Technology Co ltd filed Critical Guangzhou Mass Database Technology Co ltd
Priority to CN202111592861.XA priority Critical patent/CN114281833B/zh
Publication of CN114281833A publication Critical patent/CN114281833A/zh
Application granted granted Critical
Publication of CN114281833B publication Critical patent/CN114281833B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

实现OpenGauss数据库主从复制模式下从机快速保持与主机 数据一致性的方法
技术领域
本发明属于关系型数据库管理及操作系统技术领域,尤其涉及一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法及其用途。
背景技术
OpenGauss是一款开源关系型数据库管理系统,其内核源自PostgreSQL,作为一个开源、免费的数据库平台,旨在鼓励社区贡献、合作。目前,OpenGauss 数据库已支持对预写式日志(WAL)进行流式物理复制(流复制),数据库用户可以通过流复制,实现备库过程中一边从主库接收WAL,一边回放接收到的WAL,备库持续从主库接收和回放WAL完成备库的构建和数据同步。然而,随着主库压力的增大会产生大量的WAL,备库WAL回放速度减慢导致WAL累积,主库和备库WAL差值达到设定阈值后数据库性能将明显下降。因此,如果有一种技术方案能够使备库快速完成WAL回放,减少WAL累积,保持主库和备库WAL差值始终在设定的阈值范围之内,则可以显著提高主从复制模式下OpenGauss数据库的对外服务能力,为数据库性能的正常发挥提供有力的技术保障。
发明内容
为了克服OpenGauss数据库主从复制模式下备库WAL回放速度减慢导致的从机与主机数据不一致,进而降低数据库性能的缺陷,本发明提供了一种解决方案。本发明的目的是为OpenGauss数据库设计一种主从复制模式下从机快速保持与主机数据一致性方法,本方法是通过设计一套WAL并行回放方案来实现的。
具体而言,本发明提供了一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,本方法通过改造现有的WAL回放线程,将备库回放线程工作由单独线程回放拆分为多线程并行回放,并将WAL类型区分为事务日志和非事务日志,所述事务日志包括事务操作相关日志,所述非事务日志包括数据操作相关日志;针对事务日志,本方法仍采用单独线程回放,以避免乱序事件的发生,针对非事务日志,本方法采用多线程并行回放,以加快WAL回放速度。
进一步地,本发明方法中所述事务日志包括CSN(COMMIT SEQUENCE NUM)日志和事务提交日志;所述非事务日志包括insert操作日志和update 操作日志。
进一步地,本发明方法在实施过程中,当对非事务日志采用多线程并行回放处理时,如果非事务日志之间存在依赖关系,则将依赖关系区分为事务内依赖关系和事务间依赖关系,针对不同类型的依赖关系,采用下述不同的处理方法:
(1)针对事务内依赖关系,当一个事务内存在对同一操作对象多次操作的 WAL时,并行回放时根据从WAL信息中获取到的标识该操作对象物理位置的数字标号计算回放此日志的工作线程编号,由于标识操作对象物理位置的数字标号具有唯一性,从而保证了包含同一操作对象的所有非事务日志都由同一个工作线程回放;
(2)针对事务间依赖关系,对并行回放的WAL进行封装,并在封装结构中保存相关的标记信息,同时在数据库内核中设置WAL类型和分派函数映射关系,针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系。
进一步地,上述处理方法(2)针对事务间依赖关系中所述针对不同类型的WAL调用与之相匹配的分派函数,由分派函数处理事务间的依赖关系,具体包括以下处理方式:
(1)当WAL的类型为RM_HEAP_ID时,对应的分派函数为 DispatchHeapRecord,DispatchHeapRecord根据WAL是否涉及数据块改动来决定该WAL由哪个REDO_BATCH线程回放:
(a)若max_bloc_id>=0,表明涉及数据块改动,遍历每个数据块,依据数据块的物理文件OID来选择分组,保证物理文件OID相同的WAL由同一个工作线程回放;
(b)若max_block_id<0,表明不涉及数据块改动,则将WAL分派给多个工作线程并行回放;
(2)当WAL的类型为RM_STANDBY_ID时,对应的分派函数为DispatchStandbyRecord,DispatchStandbyRecord将此WAL分派给 REDO_TRXN_MNG线程回放;
(3)当WAL的类型为RM_XACT_ID时,对应的分派函数为 DispatchXactRecord,DispatchXactRecord首先判断此WAL是否会删除文件:
(a)如果会删除文件,则将此WAL分派给所有的REDO_BATCH线程回放;
(b)如果不删除文件,则将此WAL分派给REDO_TRXN_MNG线程回放。
优选地,本发明实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,包括以下步骤:
(1)日志接收线程将主库发送过来的WAL写入磁盘;
(2)由Startup线程从磁盘读取WAL,并将WAL区分为事务日志和非事务日志,其中:
(a)事务日志由REDO_TRXN_WORKER线程单独回放,
(b)非事务日志由多线程并行回放;
(3)针对非事务日志,根据非事务日志的类型调用不同的分派函数,分派函数对非事务日志进行分派,将其放入对应的REDO_PAGE_WORKER线程的 SPSC队列中,如果队列已满,则Startup线程会循环等待;
(4)由REDO_PAGE_WORKER线程从SPSC队列中读取非事务日志后进行回放,并更新本线程已经回放的非事务日志的位置;
(5)由Startup线程获取REDO_PAGE_WORKER线程已经回放的非事务日志的最小值,判断事务日志能否回放,如果可以则调用对应的回放函数。
此外,本发明还涉及上述实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法在关系型数据库管理或操作系统中的用途。
综上,本发明首次提出了一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,本方法通过设计一套WAL并行回放方案,很好地克服了OpenGauss数据库主从复制模式下备库WAL回放速度减慢导致的从机与主机数据不一致,进而降低数据库性能的缺陷。利用本方法能够使备库快速完成WAL回放,减少WAL累积,保持主库和备库WAL差值始终在设定的阈值范围之内,通过主从模式下进行的压测,结果显示开启WAL并行回放后数据库性能明显优于未开启状态,本方法WAL并行回放策略可显著提高主从复制模式下OpenGauss数据库的对外服务能力,为数据库性能的正常发挥提供有力的技术保障。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面对本发明实施例中需要使用的附图作简要介绍,显而易见地,下述附图仅是本发明中记载的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明方法的实施流程示意图。
图注:Startup线程:WAL处理线程;
SPSC:用于保存WAL队列;
REDO_BATCH线程:从Startup线程的SPSC队列中读取WAL并解析,然后放入REDO_PAGE_MNG线程的SPSC队列中;
REDO_PAGE_MNG线程:从自身的SPSC队列中读取解析过的 WAL,然后分派给REDO_PAGE_WORKER线程;
REDO_PAGE_WORKER线程:负责进行实际的非事务日志回放;
REDO_TRXN_MNG线程:每次从自身的SPSC队列中读取一条 WAL,然后分派给REDO_TRXN_WORKER线程处理;
REDO_TRXN_WORKER线程:负责进行实际的事务日志回放。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例,本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
同时,应理解,本发明的保护范围并不局限于下述特定的具体实施方案;还应当理解,本发明实施例中使用的术语是为了描述特定的具体实施方案,而不是为了限制本发明的保护范围。
实施例1:一种实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法(参见图1),本方法通过改造现有的WAL回放线程,将备库回放线程工作由单独线程回放拆分为多线程并行回放,并将WAL类型区分为事务日志和非事务日志;事务日志包括事务操作相关日志,例如CSN (COMMIT SEQUENCE NUM)日志和事务提交日志;非事务日志包括数据操作相关日志,例如insert操作日志和update操作日志;针对事务日志,本方法仍采用单独线程回放,以避免乱序事件的发生,针对非事务日志,本方法采用多线程并行回放,以加快WAL回放速度。
具体来说,本方法包括以下步骤:
步骤一:日志接收线程将主库发送过来的WAL写入磁盘;
步骤二:由Startup线程从磁盘读取WAL,并将WAL区分为事务日志和非事务日志,其中:
(a)事务日志由REDO_TRXN_WORKER线程单独回放,
(b)非事务日志由多线程并行回放;
步骤三:针对非事务日志,根据非事务日志的类型调用不同的分派函数,分派函数对非事务日志进行分派,将其放入对应的REDO_PAGE_WORKER线程的SPSC队列中,如果队列已满,则Startup线程会循环等待;
步骤四:由REDO_PAGE_WORKER线程从SPSC队列中读取非事务日志后进行回放,并更新本线程已经回放的非事务日志的位置;
步骤五:由Startup线程获取REDO_PAGE_WORKER线程已经回放的非事务日志的最小值,判断事务日志能否回放,如果可以则调用对应的回放函数。
实施例2:本方法中针对非事务日志采用多线程并行回放处理时,如果非事务日志之间存在依赖关系,则将依赖关系区分为事务内依赖关系和事务间依赖关系,针对不同类型的依赖关系,采用下述不同的处理方法:
(1)针对事务内依赖关系,当一个事务内存在对同一操作对象(例如同一张表)多次操作的WAL时(例如先做INSERT,再做DELETE),并行回放时根据从WAL信息中获取到的标识该操作对象物理位置的数字标号(该表的 relfilenode,根据WAL信息可以获取到)计算回放此日志的工作线程编号,由于标识操作对象物理位置的数字标号具有唯一性,从而保证了包含同一操作对象(同一个表)的所有非事务日志都由同一个工作线程回放。
(2)针对事务间依赖关系,对并行回放的WAL进行封装,并在封装结构中保存相关的标记信息(例如日志是否需要同步到其他分组),同时在数据库内核中设置WAL类型和分派函数映射关系,针对不同类型的WAL调用与之相匹配的分派函数,分派函数对非事务日志进行分派处理。
为了更清晰地说明此技术方案,列举如下示例进行示范:
数据库主库操作如下:
create table test(a int);
insert into test values(1);
数据库插入数据日志:
Figure 2
总共产生了3条WAL:
a.XLOG_HEAP_INSERT:执行插入操作;
b.XLOG_STANDBY_CSN_COMMITING:该WAL用来表示事务正在提交;
c.XLOG_XACT_COMMIT_COMPACT:事务提交日志。
备库回放:
(a)第一条WAL的类型为RM_HEAP_ID(可根据WAL中desc信息得到, Heap映射类型为RM_HEAP_ID),对应的分派函数为DispatchHeapRecord(通过WAL类型和分派函数映射关系获取),DispatchHeapRecord根据WAL是否涉及数据块改动来决定该WAL由哪个REDO_BATCH线程回放:
(1)若max_bloc_id>=0,表明涉及数据块改动,遍历每个数据块,依据数据块的物理文件OID(relfilenode)来选择分组,保证物理文件OID相同的WAL由同一个工作线程回放;
(2)若max_block_id<0,表明不涉及数据块改动,则将WAL分派给多个工作线程并行回放;
(b)第二条WAL的类型为RM_STANDBY_ID,当wal_level>=hot_standby 时,主库在事务提交阶段会记录一条此类型的WAL,对应的分派函数为 DispatchStandbyRecord,DispatchStandbyRecord将此WAL分派给 REDO_TRXN_MNG线程回放;
(c)第三条WAL的类型为RM_XACT_ID,对应的分派函数为 DispatchXactRecord,DispatchXactRecord首先判断此WAL是否会删除文件:
(1)如果会删除文件,则将此WAL分派给所有的REDO_BATCH线程回放;
(2)如果不删除文件,则将此WAL分派给REDO_TRXN_MNG线程回放。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、替换等,均应包含在本发明的权利要求保护范围之内。

Claims (6)

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_BATCH线程回放:
(a)若max_bloc_id>=0,表明涉及数据块改动,遍历每个数据块,依据数据块的物理文件OID来选择分组,保证物理文件OID相同的WAL由同一个工作线程回放;
(b)若max_block_id<0,表明不涉及数据块改动,则将WAL分派给多个工作线程并行回放;
(2)当WAL的类型为RM_STANDBY_ID时,对应的分派函数为DispatchStandbyRecord,DispatchStandbyRecord将此WAL分派给REDO_TRXN_MNG线程回放;
(3)当WAL的类型为RM_XACT_ID时,对应的分派函数为DispatchXactRecord,DispatchXactRecord首先判断此WAL是否会删除文件:
(a)如果会删除文件,则将此WAL分派给所有的REDO_BATCH线程回放;
(b)如果不删除文件,则将此WAL分派给REDO_TRXN_MNG线程回放。
5.根据权利要求1所述的实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法,其特征在于,所述方法包括以下步骤:
(1)日志接收线程将主库发送过来的WAL写入磁盘;
(2)由Startup线程从磁盘读取WAL,并将WAL区分为事务日志和非事务日志,其中:
(a)事务日志由REDO_TRXN_WORKER线程单独回放,
(b)非事务日志由多线程并行回放;
(3)针对非事务日志,根据非事务日志的类型调用不同的分派函数,分派函数对非事务日志进行分派,将其放入对应的REDO_PAGE_WORKER线程的SPSC队列中,如果队列已满,则Startup线程会循环等待;
(4)由REDO_PAGE_WORKER线程从SPSC队列中读取非事务日志后进行回放,并更新本线程已经回放的非事务日志的位置;
(5)由Startup线程获取REDO_PAGE_WORKER线程已经回放的非事务日志的最小值,判断事务日志能否回放,如果可以则调用对应的回放函数。
6.权利要求1-5任一项所述的实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法在关系型数据库管理或操作系统中的用途。
CN202111592861.XA 2021-12-23 2021-12-23 实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法 Active CN114281833B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111592861.XA CN114281833B (zh) 2021-12-23 2021-12-23 实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111592861.XA CN114281833B (zh) 2021-12-23 2021-12-23 实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法

Publications (2)

Publication Number Publication Date
CN114281833A true CN114281833A (zh) 2022-04-05
CN114281833B CN114281833B (zh) 2024-09-06

Family

ID=80874967

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111592861.XA Active CN114281833B (zh) 2021-12-23 2021-12-23 实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法

Country Status (1)

Country Link
CN (1) CN114281833B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302699A (zh) * 2023-03-20 2023-06-23 北京优炫软件股份有限公司 一种数据库并行回放的控制方法以及控制系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030061537A1 (en) * 2001-07-16 2003-03-27 Cha Sang K. Parallelized redo-only logging and recovery for highly available main memory database systems
US20130117236A1 (en) * 2011-11-07 2013-05-09 Sap Ag Database Log Replay Parallelization
CN103729442A (zh) * 2013-12-30 2014-04-16 华为技术有限公司 记录事务日志的方法和数据库引擎

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030061537A1 (en) * 2001-07-16 2003-03-27 Cha Sang K. Parallelized redo-only logging and recovery for highly available main memory database systems
US20130117236A1 (en) * 2011-11-07 2013-05-09 Sap Ag Database Log Replay Parallelization
CN103729442A (zh) * 2013-12-30 2014-04-16 华为技术有限公司 记录事务日志的方法和数据库引擎

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302699A (zh) * 2023-03-20 2023-06-23 北京优炫软件股份有限公司 一种数据库并行回放的控制方法以及控制系统
CN116302699B (zh) * 2023-03-20 2024-02-06 北京优炫软件股份有限公司 一种数据库并行回放的控制方法以及控制系统

Also Published As

Publication number Publication date
CN114281833B (zh) 2024-09-06

Similar Documents

Publication Publication Date Title
KR100926880B1 (ko) Dbms에서의 데이터 복제 방법 및 시스템
US9723097B2 (en) Assigning shared catalogs to cache structures in a cluster computing system
US7103619B1 (en) System and method for automatic audit data archiving within a remote database backup system
US6983295B1 (en) System and method for database recovery using a mirrored snapshot of an online database
EP2474919A1 (en) System and method for data replication between heterogeneous databases
US7263537B1 (en) System and method for creating multiple QUIESCE database copies at a single server
JPH1097451A (ja) クライアント/サーバ計算機システムにおけるログ・ファイルの最適化方法及び装置
US10445295B1 (en) Task-based framework for synchronization of event handling between nodes in an active/active data storage system
US8015375B1 (en) Methods, systems, and computer program products for parallel processing and saving tracking information for multiple write requests in a data replication environment including multiple storage devices
US7194486B2 (en) Method and system for data processing with data replication for the same
CN114281833A (zh) 实现OpenGauss数据库主从复制模式下从机快速保持与主机数据一致性的方法
CN116521083A (zh) 一种分布式存储集群数据的存储方法、装置及介质
CN112417043B (zh) 数据处理系统及方法
AU2015265595B2 (en) System and method for dynamic collection of system management data in a mainframe computing environment
AU2015265599B2 (en) System and method for the production of job level pre-processed backup of critical data and/or datasets in a mainframe computing environment
CN102576294A (zh) 含有多个存储装置的存储系统、方法及程序
EP2135166B1 (en) Service workload identification in a data storage system
CN113391933A (zh) 一种处理资金的方法
US7613888B2 (en) Maintain owning application information of data for a data storage system
CN109271109A (zh) 一种数据存储方法及hba卡
JP2005293323A (ja) 異種rdbms間での差分配信レコード反映システム
CN112559243B (zh) 数据快照方法、装置、电子设备及计算机可读存储介质
CN108701071B (zh) 高吞吐量、高可靠性的数据处理系统
CN111159292A (zh) 一种数据存储方法及装置
CN113986882A (zh) 一种分布式数据库数据在线迁移方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant