掌桥专利:专业的专利平台
掌桥专利
首页

一种数据库多版本的数据清理系统以及清理方法

文献发布时间:2023-06-19 19:38:38


一种数据库多版本的数据清理系统以及清理方法

技术领域

本发明涉及数据库领域,具体而言,涉及一种数据库多版本的数据清理系统以及清理方法。

背景技术

现代主流数据库系统采用MVCC(Multi-Version Concurrency Control,多版本并发控制)方法实现对数据库的并发访问。MVCC会保存某个时间点上的数据快照,这意味着事务可以看到一个一致的数据视图,不管它们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。为了使在数据库多个不同的连接中,每个链接都能维持各自的数据一致性,数据库对数据的UPDATE、DELETE保留了数据行副本。

对于数据行副本常见的维护方式,例如在MySQL数据库系统中,使用Undo Log维护数据行副本;在Oracle数据库系统中,使用Undo Segment维护数据行副本;在Postgresql数据库系统中,将数据行副本和数据一起放在数据表文件中。为了使数据库平稳、高效地运转,数据库都需要一种有效的数据行副本维护和清理的办法。

在Postgresql数据库内核中,因为最新数据行和数据行副本都在数据块文件中,数据行的清理和读写存在冲突关系。可以经常观测到的现象是,如果一个表的数据量小、改动操作频繁,那么该表会产生大量数据行副本,导致的数据膨胀率是很高的。这种现象的原因是Postgresql的数据库Backend读取完数据块后会保留指针,使得Backend能够在不加内存锁的情况下使用数据,但此时也不能对该数据块进行清理。这种情况下如果发生了副本清理将会导致内存错误。Postgresql内核采用Pin(注:Pin为数据块引用计数)的方式互斥读写操作与副本清理,数据块的引用计数意味着有对应数量的Backend正在使用数据块,当还有其他Backend使用数据块时不能执行副本清理。

另外,原Postgresql的MVCC清理功能不能支持基于共享存储多机的集群架构,例如Oracle RAC实时应用集群。因为Pin的使用十分频繁,如果使用Postgresql来构建基于多机的集群数据库(以下简称“集群数据库”),那么在多机之间进行Pin的全局管理的过程中,网络开销将会带来十分严重的损耗;对于集群数据库,每次执行清理如果都需要全局检测Pin计数也将极大地阻碍了MVCC清理的有效执行。

有鉴于此,特提出本发明。

发明内容

有鉴于此,本发明公开了一种数据库多版本的数据清理系统,用以解决数据库Backend读写操作和副本清理相互排斥的制约条件,进而能够支持多机共享存储数据库架构下的MVCC清理。

具体地,本发明是通过以下技术方案实现的:

第一方面,本发明公开了数据库多版本的数据清理系统,包括:

数据块扫描备份与管理模块、数据块扫描模块、并发冲突修正模块、清理执行执行模块;

其中,所述数据块扫描备份与管理模块,用于在数据库扫描过程中对命中的数据行进行备份,并发冲突发生时提供纠错的数据基础;

所述数据块扫描模块,用于执行数据的扫描流程;

所述并发冲突修正模块,用于发生并发冲突时执行基于乐观并发控制策略的“补偿与修正”;

所述清理执行执行模块,用于执行老旧数据的MVCC清理。

第二方面,本发明公开了采用上述数据清理系统来实现数据清理的方法。

第三方面,本发明公开了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第二方面所述数据清理方法的步骤。

第四方面,本发明公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第二方面所述数据清理方法的步骤。

对于本发明数据清理系统的实现原理,鉴于数据库中的数据块在被使用的过程中与MVCC清理的互斥关系,本发明构建的基于数据库扫描与控制的乐观并发控制方法,而非原Postgresql的悲观式的并发控制方法-执行读写操作或清理时不对数据块封锁,而是在并发冲突发生时提供“补偿与修正”的方式,使得数据库读写操作和MVCC清理操作可以无锁地、不互斥地、并发地执行。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例提供的数据清理系统的结构示意图;

图2为本发明实施例提供的多机部署示意图;

图3是本发明实施例中数据库写操作的执行流程示意图;

图4是本发明实施例中数据库读操作的执行流程示意图;

图5为本发明实施例提供的一种计算机设备的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

如图1所示,本发明公开了一种数据库多版本的数据清理系统,包括:数据块扫描备份与管理模块、数据块扫描模块、并发冲突修正模块、清理执行执行模块;

其中,所述数据块扫描备份与管理模块用于在数据库扫描过程中对命中的数据行进行备份,并发冲突发生时提供纠错的数据基础;

所述数据块扫描模块用于执行数据的扫描流程;

所述并发冲突修正模块用于发生并发冲突时执行基于乐观并发控制策略的补偿与修正;

所述清理执行执行模块用于执行老旧数据的MVCC清理。

本发明的数据清理系统实现了通过在数据扫描过程中针对扫描命中的数据行进行拷贝,接下来的数据库扫描处理都使用拷贝进行处理,从而能消除原Postgresql数据库系统下扫描操作和MVCC清理的互斥关系。并在Postgresql数据库执行写操作的过程中实施补偿与修正策略,从而能消除原Postgresql数据库写操作与MVCC清理的互斥关系。

具体地,所述数据块扫描备份与管理模块,用于在数据库扫描过程中对命中的数据行进行备份,使用完毕后将备份释放,本模块在并发冲突发生而需要补偿纠错时提供纠错的数据基础;

所述数据块扫描模块,用于执行数据的扫描流程,主要支持全表遍历扫描、索引扫描,与原Postgresql的数据扫描相比,额外提供了扫描命中数据行的备份与备份清理的处理;

所述并发冲突修正模块,用于在读写操作和MVCC清理发生并发冲突的情况下,执行基于乐观并发控制策略的“补偿与修正”;

所述清理执行执行模块,用于执行数据块中老旧数据的MVCC清理,与原Postgresql的MVCC清理相比,区别在于使用了并发冲突修正模块提供的并发控制与补偿修正策略。

各个模块的具体工作过程如下:

A.所述数据块扫描备份与管理模块的工作过程包括:

A1.数据基础:属于Backend私有空间,由每个Backend生成私有内存进行管理。由于Backend同时扫描并使用的数据块数量有限(注:最多8个),Backend最多维护8个数据块内的数据行拷贝。

A2.数据行拷贝:拷贝的数据行以数据块为单位进行划分,数据块扫描备份与管理模块提供拷贝执行接口,数据扫描过程中为扫描命中的数据行申请内存空间,将数据行拷贝到指定位置形成拷贝内存。

A3.拷贝内存释放:当Backend做最终ReleaseBuffer动作时,执行拷贝内存释放动作,Free掉目标数据块内全部的Tuple拷贝。

B.所述数据块扫描模块的实现方法如下所示:

在数据扫描过程基于所述数据块扫描备份与管理模块提供的拷贝接口,将扫描过程中命中的数据行做拷贝,主要需要支持顺序扫描、索引扫描、Bitmap Index扫描。对于数据库的读操作行为,在第一次扫描命中而做了拷贝之后,后续对于命中数据行的处理都使用数据行拷贝,而非(原数据块上的)数据行指针。

C.所述并发冲突修正模块的实现方法为:

每次数据块被施加完毕独占封锁而需要进行写操作时,通过使用所做的拷贝对数据块内的数据进行比对,如果待修改的数据块被执行了MVCC清理而使得数据行的偏移位置发生了变化,则根据所做的拷贝重新定位待修改的数据行。

D.所述清理执行执行模块的实现方法为:

D1.触发条件:在数据块被施加完毕独占封锁而需要进行写操作时,在执行写操作之前检查数据块是否需要被清理,如果存在老旧数据版本(即所有事务不可见的数据行副本)则可以执行MVCC清理。但本发明实施例考虑到数据库的性能调优,采用了如下MVCC清理的触发条件:

数据块剩余空闲空间<=总空间*(fill_factor/100)*0.4;

或数据块剩余空闲空间<=总空间*0.1。

(注:fill_factor为数据块的填充率,是原Postgresql参数,指的是数据块被Insert最多可以填充到数据块总大小的百分之多少)

D2.清理执行:清理执行分为老旧数据行删除与数据块空闲空间整理两个步骤。老旧数据行删除步骤将带清理数据行擦除(即清理);数据块空闲空间整理步骤将擦除老旧数据行之后的数据块内的空洞进行整理,将所有存留的数据行挪动位置从而将数据块内的空洞空间消除。

通过使用基于内存融合功能与数据共享存储的多个数据库节点,多个数据库节点共同操作同一份数据文件,所述内存融合功能提供数据块资源的传输与调度。在此基础上,本发明实施例能够支持各个数据库节点能够各自执行MVCC清理,以及在各个节点并行执行操作、多并发连接的情况下,各个节点之间的读写操作和MVCC清理不冲突,每个节点上的读写操作和MVCC清理不冲突,数据库业务操作和MVCC清理能够互不干扰地运行。

如图2所示,图2为本发明实施例使用的一种基于内存融合的数据库集群架构图。如图2所示,多个数据库节点(节点1、节点2以及节点3)使用共享存储服务或共享的磁盘阵列之上的同一份数据存储。内存融合功能和共享存储为多机数据库系统的每个节点提供操作共享数据的能力,而本发明的一种在Postgresql数据库系统上的数据库多版本数据清理技术为该多机数据库架构提供MVCC清理能力。

图3为本发明实施例为解决写操作与MVCC清理并发冲突提供的写操作流程示意图。图中:

301、数据库Backend对数据块施加内存独占锁,准备执行写操作;

302、在执行写操作之前,首先检测数据块是否需要被清理;若是,执行步骤303,否则执行步骤304

303、具体执行数据清理与空间回收;

304、检测写操作是否与其他Backend的MVCC清理发生并发冲突,若是,执行步骤305,否则执行步骤306;

305、在发生当前Backend的写操作与其他Backend的清理操作并发冲突时,执行针对并发冲突的补偿修正;

306、数据库Backend具体执行数据块修改操作;

307、数据块解除独占内存封锁;

具体地,由于数据库的写操作需要首先进行扫描与处理,然后才能进行写操作。对于步骤304的“检测写操作是否与其他Backend的MVCC清理发生并发冲突”,并发冲突可能发生在Backend施加数据块内存独占锁之前。但是,在数据块被施加独占封锁之后该数据块不能被其他Backend使用,故在数据块被施加独占封锁之后不会有新的并发冲突产生。

数据库经常处于多Backend、多连接、多并发的运行环境。每个Backend在执行业务写操作的过程中,都可能触发数据块的MVCC清理,同时有可能与其他Backend的读写操作产生并发冲突,图3所示流程能解决MVCC清理与其他Backend的写操作的并发冲突。

图4为本发明实施例实际操作时,为解决读操作与MVCC清理并发冲突提供的读操作流程示意图。图中:

401、数据库Backend对数据块施加内存共享锁,准备执行读操作;

402、读操作根据扫描条件,检查是否有数据行符合条件;是则执行步骤403,否则执行步骤404;

403、对命中的数据行执行数据行拷贝,拷贝至407数据行拷贝空间;

404、在扫描完毕数据块并拷贝全部命中的数据行之后,解除数据块的内存共享锁;

405、具体执行数据扫描处理的步骤;

406、待数据块使用完毕之后,释放该数据块内的数据行拷贝;

407、命中数据行拷贝空间,数据行的拷贝以所属数据块为目录进行划分,拷贝存放于本Backend进程的私有内存空间。

具体地,由于数据库的读操作需要首先进行扫描,然后才进行读操作处理,扫描与执行数据行拷贝完成之后立即解除数据块的共享锁,此时还没有进行读处理。在执行完扫描之后的读处理,例如数据库HAVING、ORDER BY、GROUP、JOIN等子句。

数据库经常处于多Backend、多连接、多并发的运行环境。每个Backend在执行业务读操作的过程中,都可能与其他Backend的MVCC清理产生并发冲突,图4所示流程能解决读操作与其他Backend的MVCC清理产生的并发冲突。

在图3、图4的基础上,图3解决了数据库写操作与MVCC清理产生的并发冲突,图4解决了数据库读操作与MVCC清理产生的并发冲突。将图3、图4所述功能流程结合运用,将能够使得数据库读写操作与MVCC清理互不干扰,可以不相互制约地、不需要其并发控制调节的并行执行。

需要说明的是,为了使得上述描述更加清晰与简单,上述读操作与写操作的处理流程中说明了读写操作与其他Backend的MVCC清理的并发冲突解决方法,没有强调是本节点Backend还是其他节点Backend。本发明实施例在图2所示数据库共享存储集群架构中,每个节点都有一或多个数据库SQL执行进程,每个节点的读写操作都有可能与其他节点的MVCC清理发生并发冲突。本发明所提供的方法技能解决一个节点之内的读写操作与MVCC清理的冲突,也能解决图2所示数据库集群架构中每个节点的读写操作与其他节点MVCC清理的并发冲突,在此不再赘述。

图5是本发明公开的一种计算机设备的结构示意图。参考图5所示,该计算机设备包括:输入装置63、输出装置64、存储器62和处理器61;所述存储器62,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器61执行,使得所述一个或多个处理器61实现如上述实施例提供的一种数据库多版本的数据清理方法;其中输入装置63、输出装置64、存储器62和处理器61可以通过总线或者其他方式连接,图5中以通过总线连接为例。

存储器62作为一种计算设备可读写存储介质,可用于存储软件程序、计算机可执行程序,如本申请实施例所述的一种数据库多版本的数据清理方法对应的程序指令;存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等;此外,存储器62可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件;在一些实例中,存储器62可进一步包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置63可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入;输出装置64可包括显示屏等显示设备。

处理器61通过运行存储在存储器62中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理。

上述提供的计算机设备可用于执行上述实施例提供的一种数据库多版本的数据清理方法,具备相应的功能和有益效果。

本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如上述实施例提供的一种数据库多版本的数据清理方法,存储介质是任何的各种类型的存储器设备或存储设备,存储介质包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等;存储介质可以还包括其它类型的存储器或其组合;另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统;第二计算机系统可以提供程序指令给第一计算机用于执行。存储介质包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。

当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上实施例所述的一种数据库多版本的数据清理方法,还可以执行本申请任意实施例所提供的一种数据库多版本的数据清理方法的相关操作。

最后应说明的是:虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。

类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。

由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。

相关技术
  • 数据库清理方法、系统、装置及存储介质
  • 一种数据库中的多版本并发控制方法及数据库系统
  • 一种数据库中的多版本并发控制方法及数据库系统
技术分类

06120115980233