本发明涉及系统优化
技术领域:
:,尤其是涉及一种基于无碎片回收的数据库多版本并发控制系统。
背景技术:
::传统的数据库在支持并发事务访问时,通常会提供不同的数据访问隔离级别来满足应用对数据的使用。目前主要有两种实现方式:基于事务锁的机制和基于多版本并发控制机制。前者最大的弊端是会出现读写互斥从而降低系统的并发性。所以后者逐渐成为目前的主流实现方式。其原理是在数据变更或删除时在数据结构后部追加新数据版本,且在系统中保留原有版本的数据版本。同时,每次生成数据时要记录一个递增的版本号标识,这样在查询时可以根据查询事务开始时的标识可以确定使用哪一个版本的数据。基于多版本并发控制机制最大的问题就是需要耗费额外的存储空间。所有基于多版本并发控制机制实现的数据库都需要实现一套空间回收机制,释放不再需要的版本。在实践中,这些回收过程会带来额外的cpu开销、磁盘的读写操作和内存操作,回收操作触发过程中系统处理能力受到极大影响,稳定性大幅下降。回收后还会造成磁盘碎片化,降低了磁盘访问效率。技术实现要素:本发明实施例所要解决的技术问题在于,提供一种基于无碎片回收的数据库多版本并发控制系统,能够通过采用一套简单有效的、不会给系统带来太大影响的存储回收机制,从而给多版本并发控制的数据库性能带来极大的提升。为了解决上述技术问题,本发明实施例提供了一种基于无碎片回收的数据库多版本并发控制系统,包括:事务信息记录模块,用于对数据库中的各个事务分配唯一标识,并对系统中的最老未提交事务、以及发起于所述最老未提交事务之后的事务信息进行记录;事务数据管理模块,用于利用回滚段空间对事务以及记录数据进行操作管理和访问优化;其中,所述回滚段由一个文件或一组定长文件组成;数据可见性优化模块,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的可见性进行约束;内存优化提速模块,用于将系统中最近的一个老版本记录缓存到非磁盘内存结构中;其中,所述非磁盘内存结构包括哈希桶;多版本回收模块,用于区分回滚段空间中的复用文件和非复用文件,对所述非复用文件进行清除,并对所述复用文件进行回收。进一步地,所述事务信息包括事务id、提交状态信息、提交时的时间戳。进一步地,所述事务数据管理模块包括:事务访问管理单元,用于利用回滚段空间对事务进行操作管理;其中,事务对记录的操作包括创建操作、修改操作和删除操作;回滚段空间管理单元,用于对回滚段中的记录版本进行存储和访问管理。进一步地,所述回滚段空间由哈希表和磁盘文件组成;其中,所述磁盘文件的数量为一个或一组;当所述回滚段空间由一组磁盘文件组成时,所述磁盘文件的每个文件均为定长文件。进一步地,所述数据可见性优化模块,包括:事务访问操作约束单元,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;记录版本信息访问优化单元,用于根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;其中,所述读锁结果包括读锁申请成功和读锁申请失败;老版本记录访问约束单元,用于根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的访问可见性进行约束。进一步地,所述多版本回收模块,包括:回滚段文件区分单元,用于根据事务初始日志顺序号对回滚段文件与最老未提交事务进行新老比较,并根据比较的结果区分回滚段空间中的复用文件和非复用文件;回滚段文件清除单元,用于对回滚段空间中的非复用文件进行清除;回滚段文件回收单元,用于对回滚段空间中的复用文件进行回收,作为循环利用文件。进一步地,所述多版本回收模块对回滚段空间的清除和回收操作的触发方式包括:根据预设的时间间隔进行触发;或,根据预设的回滚段文件使用次数阈值进行触发。与现有技术相比,本发明具有如下有益效果:1.回滚段回收简单,没有显著的系统开销,没有系统性能抖动,也不会造成磁盘的碎片化;2.可配置的回滚段在有足够磁盘的情况下可以保证没有对并发运行事务个数和事务长短的限制;3.内存与磁盘相结合的设计可以满足绝大多数情况下(短事务)避免或减少磁盘访问,从而保证系统的访问性能。附图说明图1是本发明一实施例提供的基于无碎片回收的数据库多版本并发控制系统的结构示意图;图2是本发明一实施例提供的回滚段访问的应用举例示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。相比于现有技术,本发明采用定长数据段来存储链式结构下的多版本数据记录,并在数据段的元数据中保留本段中最后更新的数据版本。在老数据回收时,根据数据段中元数据判断该段多版本记录是否全部老于当前数据库系统活跃的事务范围来决定是否整段数据需要被回收。这种大块的数据回收的机制可以保证回收效率,不会造成磁盘碎片,同时有效减少了对系统的开销。以下为本发明实施例中的术语解释:事务(transaction):是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务具有原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(duration),简称acid。事务日志记录(lr,logrecord):数据库系统中额外的记录,用于记录针对数据库的任何变更,以保证事务回滚时数据可以被恢复到更新前的状态。隔离级别(isolationlevel):在标准sql规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。4个隔离级别分别是:读未提及(read_uncommitted)、读已提交(read_committed)、可重复读(repeatable_read)、顺序读(serializable)。多版本并发控制(mvcc):数据库里的一种并发控制机制,用以解决数据的幻读问题,从而在不阻塞读的情况下实现可重复读。最老的未提交事务(lowtran):系统中最早开始的且尚未提交的事务。日志顺序号(lsn,logsequencenumber):事件发生时对应日志中的递增顺序号。事务id(tid,transactionid):事务的唯一标识号。事务开始lsn(tblsn,transactionbeginlsn):事务开始时的lsn。由于lsn的唯一性,可以使用tblsn来标识一个事务。本发明中优选地可使用tblsn来替代tid。记录id(rid):一条记录的唯一标识,通常包含定位一条记录的信息,例如磁盘上的逻辑或物理位置。回滚段(rollbacksegment):存储老版本的数据片段,可以在内存中或磁盘上。请参见图1,本发明实施例提供了一种基于无碎片回收的数据库多版本并发控制系统,包括:事务信息记录模块,用于对数据库中的各个事务分配唯一标识,并对系统中的最老未提交事务、以及发起于所述最老未提交事务之后的事务信息进行记录;进一步地,所述事务信息包括事务id、提交状态信息、提交时的时间戳。在具体实施例中,需要说明的是,数据库中每个事务都有其唯一标识。这个标识在逻辑上是根据事务进入系统的先后顺序递增的,在各种数据库的实现中,通常使用包含时间戳或者是日志顺序号(lsn)的id来标识。数据库管理系统通常会记录当前系统中的lowtran,以及所有开始于lowtran之后的事务的状态,至少包括事务id,是否提交,提交时的时间戳。对于每条记录,系统也要隐式的标注创建该记录版本的事务id用于可见性判断。事务数据管理模块,用于利用回滚段空间对事务以及记录数据进行操作管理和访问优化;其中,所述回滚段由一个文件或一组定长文件组成;进一步地,所述事务数据管理模块包括:事务访问管理单元,用于利用回滚段空间对事务进行操作管理;其中,事务对记录的操作包括创建操作、修改操作和删除操作;回滚段空间管理单元,用于对回滚段中的记录版本进行存储和访问管理。在本发明实施例中,优选地,所述回滚段空间由哈希表和磁盘文件组成;其中,所述磁盘文件的数量为一个或一组;当所述回滚段空间由一组磁盘文件组成时,所述磁盘文件的每个文件均为定长文件。在本发明实施例中,事务对数据的修改过程如下:1.所有事务发起时从系统中获取tblsn并写一条事务开始日志。2.事务创建(insert),修改(update)或删除(delete)一条记录时,先获取记录锁,成功后先将原有版本记录(仅限修改和删除操作)放入回滚段,在原有位置直接变更或插入记录,记录的头部包含本事务的tblsn,也即生成这个版本数据的事务tblsn。删除操作可直接删除该记录。3.回滚段是包含一个内存中的哈希表,和一个或一组磁盘文件。文件由多个定长的数据段组成。记录根据版本在文件中呈链式结构。请参见图2,记录将根据rid哈希到不同的哈希桶中,每个桶中存放该记录的最后一个老版本的磁盘地址。每个磁盘上老版本记录都会包含一个指针指向更老的一个版本从而形成一个链。但通过哈希桶加入一个新的记录版本时,系统只需要在回滚段最后追加那个记录,将其指针指向哈希桶中原来保存的地址,再更改哈希桶中的地址指向新添加的记录即可。这样每个哈希桶中对应的都是重新到老的记录版本链。当然由于哈希桶数量有限,每个桶上还是会有冲突的,也即一条链上可能会出现多个记录,系统通过对比rid可以找到匹配的记录。4.回滚段由一个文件或一组定长文件组成;当由一组文件组成时,每个文件有定长大小。在文件的元数据中,可以放在文件头或其他地方,保存该文件中所有记录事务的最大tblsn(maxtblsn)。这个tblsn有别于记录头上的tblsn,它是要修改该版本记录的事务的tblsn。当一个文件写满后,或空余位置不足以保存下一条记录时,回滚段自动切换到下一个文件。在具体实施例中可以人为限制单个文件大小和总文件数目,也可不做限制。当不做限制时可能占用很多磁盘空间,但做限制时也会限制数据库系统中允许的未提交事务个数和最长允许的未提交事务执行时间。当回滚段由一个文件组成,该文件可以由多个定长的逻辑段组成。每个逻辑段上保存本段中的maxtblsn。逻辑段切换逻辑与文件切换逻辑类似。在系统中会有元数据追踪当前使用的文件或逻辑段信息。数据可见性优化模块,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的可见性进行约束;进一步地,所述数据可见性优化模块,包括:事务访问操作约束单元,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;记录版本信息访问优化单元,用于根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;其中,所述读锁结果包括读锁申请成功和读锁申请失败;老版本记录访问约束单元,用于根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的访问可见性进行约束。在本发明实施例中,数据可见性有多种判断方法且与上面回滚段的设计相互独立。下面进行具体举例描述一种结合事务tblsn、事务锁的优化实现方式:1.插入/修改/删除操作需要持有记录排他锁保证写写互斥;2.读操作会先尝试获取记录的共享锁,根据获取记录锁成功/失败,记录的版本信息可以分为以下三种情况处理:(1)读锁申请成功,如果读事务tblsn大于当前磁盘记录的tblsn,意味着读事务发起于最新版本生成之后,读事务可以直接使用当前磁盘版本记录;(2)读锁申请成功且读事务tblsn小于磁盘记录的tblsn,读事务需要使用回滚段中的老版本。这种场景下可以立即释放记录锁,也即读老版本过程中不用持有记录锁。(3)读锁申请失败,读事务需要使用老版本,具体操作类似情况2。同样在读老版本过程中不用持有记录锁3.在使用老版本时,先通过rid找到对应哈希桶,读到记录在回滚段中的地址(文件加偏移量)。读出记录信息,如果rid匹配,则比较事务tblsn和记录tblsn。若记录tblsn小于事务tblsn,则该记录对事务可见,否则根据指针找到更老的一个版本,直至找到可见版本为止。内存优化提速模块,用于将系统中最近的一个老版本记录缓存到非磁盘内存结构中;其中,所述非磁盘内存结构包括哈希桶;在本发明实施例中,需要说明的是,由于磁盘访问速度太慢,可能影响事务的响应时间。为提高响应速度,系统可以将最近的一个老版本缓存在哈希桶中或者是其他的内存结构上。从而保证了在短事务场景下,内存中的这一个老记录版本能满足大部分访问需求,从而避免了磁盘访问。多版本回收模块,用于区分回滚段空间中的复用文件和非复用文件,对所述非复用文件进行清除,并对所述复用文件进行回收。进一步地,所述多版本回收模块,包括:回滚段文件区分单元,用于根据事务初始日志顺序号对回滚段文件与最老未提交事务进行新老比较,并根据比较的结果区分回滚段空间中的复用文件和非复用文件;回滚段文件清除单元,用于对回滚段空间中的非复用文件进行清除;回滚段文件回收单元,用于对回滚段空间中的复用文件进行回收,作为循环利用文件。在本发明实施例中,进一步地,所述多版本回收模块对回滚段空间的清除和回收操作的触发方式包括:根据预设的时间间隔进行触发;或,根据预设的回滚段文件使用次数阈值进行触发。需要说明的是,系统可以设置后台任务负责回收回滚段空间。其中,当使用一组回滚段文件时,若一个回滚段文件的maxtblsn>lowtran,该文件可以被重用或删除。当使用一个回滚段文件时,当一个逻辑段的maxtblsn>lowtran时该逻辑段可以被重用。可以理解的是,其原理是所有可能访问该版本的事务都已经结束了(提交或回滚),任何正在运行或新来的事务只需要访问当前磁盘上最新数据项或回滚段中相对新的老版本记录了,整个数据库系统不再需要这个文件或逻辑段中的记录了。这样的后台任务非常简单,只需扫描文件或逻辑段的元数据就可以清除不需要的大块定长空间。一般可以根据数据库实际使用负载来配置定长大小和总的逻辑块/文件个数,并选择是否复用空间。可以在决定复用时选择一个文件和多个逻辑块的模式,不复用空间时选用多个文件的模式。在多文件(不复用)模式下,清除就是删除不用的文件。在复用的模式下,系统只需记住回收到了那个文件或逻辑块,然后循环使用。在具体实施例中,后台任务可以设定为定时触发,或者在回滚段使用达到一定预设阀值时触发。综上所述,本发明实施例利用定长文件的文件组或定长逻辑段的方式设计回滚段,提供了一套mvcc实现机制和回滚段回收清理方法,并结合内存来提高访问响应时间。相对于现有mvcc实现有如下优势:1.回滚段回收简单,没有显著的系统开销,没有系统性能抖动,也不会造成磁盘的碎片化;2.可配置的回滚段在有足够磁盘的情况下可以保证没有对并发运行事务个数和事务长短的限制;3.内存与磁盘相结合的设计可以满足绝大多数情况下(短事务)避免或减少磁盘访问,从而保证系统的访问性能。需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。以上所述是本发明的优选实施方式,应当指出,对于本
技术领域:
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
技术特征:
1.一种基于无碎片回收的数据库多版本并发控制系统,其特征在于,包括:
事务信息记录模块,用于对数据库中的各个事务分配唯一标识,并对系统中的最老未提交事务、以及发起于所述最老未提交事务之后的事务信息进行记录;
事务数据管理模块,用于利用回滚段空间对事务以及记录数据进行操作管理和访问优化;其中,所述回滚段由一个文件或一组定长文件组成;
数据可见性优化模块,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的可见性进行约束;
内存优化提速模块,用于将系统中最近的一个老版本记录缓存到非磁盘内存结构中;其中,所述非磁盘内存结构包括哈希桶;
多版本回收模块,用于区分回滚段空间中的复用文件和非复用文件,对所述非复用文件进行清除,并对所述复用文件进行回收。
2.根据权利要求1所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述事务信息包括事务id、提交状态信息、提交时的时间戳。
3.根据权利要求1所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述事务数据管理模块包括:
事务访问管理单元,用于利用回滚段空间对事务进行操作管理;其中,事务对记录的操作包括创建操作、修改操作和删除操作;
回滚段空间管理单元,用于对回滚段中的记录版本进行存储和访问管理。
4.根据权利要求3所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述回滚段空间由哈希表和磁盘文件组成;其中,所述磁盘文件的数量为一个或一组;当所述回滚段空间由一组磁盘文件组成时,所述磁盘文件的每个文件均为定长文件。
5.根据权利要求1所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述数据可见性优化模块,包括:
事务访问操作约束单元,用于利用记录排他锁以对事务的访问操作进行写写互斥约束;
记录版本信息访问优化单元,用于根据事务对记录锁的读锁结果,对记录的版本信息进行访问优化处理;其中,所述读锁结果包括读锁申请成功和读锁申请失败;
老版本记录访问约束单元,用于根据事务初始日志顺序号和记录初始日志顺序号的比较结果,对老版本记录的访问可见性进行约束。
6.根据权利要求1所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述多版本回收模块,包括:
回滚段文件区分单元,用于根据事务初始日志顺序号对回滚段文件与最老未提交事务进行新老比较,并根据比较的结果区分回滚段空间中的复用文件和非复用文件;
回滚段文件清除单元,用于对回滚段空间中的非复用文件进行清除;
回滚段文件回收单元,用于对回滚段空间中的复用文件进行回收,作为循环利用文件。
7.根据权利要求1所述的基于无碎片回收的数据库多版本并发控制系统,其特征在于,所述多版本回收模块对回滚段空间的清除和回收操作的触发方式包括:
根据预设的时间间隔进行触发;或,
根据预设的回滚段文件使用次数阈值进行触发。
技术总结
本发明提供了一种基于无碎片回收的数据库多版本并发控制系统,包括事务信息记录模块、事务数据管理模块、数据可见性优化模块、内存优化提速模块和多版本回收模块。本发明利用定长文件的文件组或定长逻辑段的方式设计回滚段,提供了一套MVCC实现机制和回滚段回收清理的方法,并结合内存访问优化来提高访问响应时间,从而避免了回滚段回收时造成显著的系统开销,且避免造成磁盘的碎片化;同时,可配置的回滚段在有足够磁盘的情况下可以保证没有对并发运行事务个数和事务长短的限制;另外,内存与磁盘相结合的设计可以满足绝大多数情况下避免或减少磁盘访问,从而保证系统的访问性能。
技术研发人员:陈元熹;许建辉;王涛
受保护的技术使用者:深圳巨杉数据库软件有限公司
技术研发日:.10.16
技术公布日:.02.21
如果觉得《基于无碎片回收的数据库多版本并发控制系统的制作方法》对你有帮助,请点赞、收藏,并留下你的观点哦!