一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法

文档序号:6371260阅读:162来源:国知局
专利名称:一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法
技术领域
本发明设计属于数据信息处理领域,特别涉及使用日志技术来保证数据一致性的事务性数据管理系统。
背景技术
在冯氏计算机体系结构中,永久性数据被存放在速度较慢、容积较大的外存设备中(如硬盘),而当数据被访问时,它被读入速度较快、容积较小的内存设备中(如RAM),并被中央处理器访问。然而由于性能的要求,数据在更新时只更新其内存映像,而对外存的更新由缓冲区管理单元延时进行。
在事务性数据管理系统中,单个事务一即由若干条更新所组成的一次操作过程一被视为一个基本工作单元,它有两条重要的性质,一为一致性,即所有对数据的更新必须同时被看到,或者完全看不到;二是持久性,即当事务提交时,所有对数据的更新必须永久保存到系统中。在大量并发事务同时工作的情况下,一致性和持久性是保证整个系统正确运行的必备条件。但由于数据的外存映像总是延迟于内存的最新版本,因此当系统发生故障时,此时外存的数据版本可能丢失已提交事务的更新(破坏持久性),也可能保存了未提交事务的更新(破坏一致性)。目前所有的事务性数据管理系统均采用基于日志的恢复协议来恢复系统,以实现一致性和持久性。这一协议可以被简要描述如下日志是外存上的一个流结构文件,系统在内存中维护一个日志缓冲区,其中存放最近产生的日志。当事务A准备对数据页面P进行一条更新U时,系统向日志缓冲区中产生一条日志(S,A,P,U,Cp, Cs,Sprev),其中S是本条日志在日志流中的唯一日志序列编号(随时间单调递增),Cp是更新的数据前项,Cs是更新的数据后项,而Sprev是事务A的上一条更新日志的日志序列编号。事务在更新前,将S写在P上。而数据缓冲区管理单元和事务管理单元必须遵循以下原则1)当数据页面被数据缓冲区管理单元写回外存时,其页面上的唯一日志序列编号之前的日志必须被先物化到外存日志文件中。2)当事务提交时,此时日志缓冲区内的所有日志必须被物化到外存日志文件中。当整个系统发生故障时,首先扫描外存已经物化的日志文件,每条日志S对应的页面P被读入内存,并检查页面上的日志序列编号S,与S之间的关系,如果S’小于S,则说明页面的外存版本在本条日志更新之前,此时本条日志需要被重做,并将页面序列号更新到S,如果S’大于S,则说明本条日志对应的更新已经物化过了,不需要重做。由于事务提交时必须物化所有的日志,因此事务的持久性得到了保证。当所有日志都被扫描并按需重做后,同时也构建了发生故障时的活跃事务表,由于同一事务的更新日志被通过日志的Sprev域链接起来,因此可以回退所有的更新日志,使数据库恢复到一致状态。上述日志结构和恢复协议在现代计算机系统中存在着一定的问题。首先,单条日志的体积较大,由于每条日志必须记录日志序列编号S,事务号A,事务日志前项Sprev,这些域加起来的长度往往超过20字节,而如果一条更新本身操作的数据较短时,这些域所占的空间往往接近整个日志文件空间的1/3甚至1/2 ;其次,由于产生日志的动作必须全局同步以保证日志序列的唯一递增性,而当前的大型计算机往往拥有几十甚至上百个中央处理器,当更新密集发生时,会造成延展性的瓶颈。

发明内容
本发明目的在于提供一种按事务聚集的日志组织结构,以及基于其上的恢复协议的实现方法,以达到减小日志文件体积,提高系统在高并发条件下的性能的目标。为达到上述目标,本发明是通过以下技术方案实现的一种按事务聚集的日志组织结构。日志文件被顺序组织为若干个日志片,每个日志片的长度可以不一样,但都为外存设备基本块单元长度的整数倍。所述日志文件组织结构中的一个日志片存放同一个事务的日志内容,其基本结构 为(S,A,Pn, Ln, Pa, La, Sprev)。其中,S代表本日志片在日志文件中的唯一日志序列编号,A代表本日志片的相关事务号,Pn代表本日志片所涉及的数据页面数目,Ln代表本日志片所包含的日志数目,它们都是定长的域。面Pa是本日志片中的日志涉及的所有页面的页面号数组,数组共有Pn个定长的项,每项代表一个单独的数据页面编号。La是所有的日志项数组,数组共有Ln个变长的项,每项代表一条单独的日志。Sprev为本事务的上一日志片的序列号。所述日志片中的页面号数组Pa按照页面号排序,以便于通过二分法快速定位访问。所述日志片中的日志项数组La中单条日志的组织结构为(seq,i, U,Cp, Cs)。其中,seq为相关数据页面上的页面序列号,该序列号在每次数据页面发生更新时递增。i是处于
是本条日志所发生的数据页面。U,Cp和Cs的相关含义和背景技术中的定义一致。一种实现基于上述日志文件结构的恢复协议的方法,包括每个事务维护一个私有的日志缓冲区,其结构与日志文件的一个日志片一致,对私有日志缓冲区的访问不需要同步。当事务A更新一个数据页面时,向私有日志缓冲区的日志项数组La中插入一条新的日志,并可能更新页面号数组Pa。在每个数据页面上维护一个单调递增的页面序列号seq,更新时seq被记录到日志中,更新后seq加I,且事务号A被记录在页面上。当事务提交时,它的私有日志缓冲区被写回日志文件,并获得唯一的日志序列编号S。当数据缓冲区管理单元将某个数据页面写回数据文件时,如果页面上记录的事务号上有活跃事务号,则该事务的私有日志缓冲区被写回日志文件,并获得唯一的日志序列编号S,然后该私有日志缓冲区被重置。当系统出错后进行恢复时,首先进行重做。重做过程为按序扫描日志片及其中所有的日志项数组,并按照日志项内容中的seq’与相关页面上的seq进行比对,如果seq’等于seq,则重做该条日志并将页面上的seq加1,如果seq’等于seq,则不重做该条日志。当重做完成后,对所有活跃事务进行回退。回退过程为对于每个活跃事务,根据Sprev域逆序扫描所有的日志片,对每个日志片逆序扫描所有的日志项数组,并对日志项内容数组中的每一条日志进行回退操作。本发明解决了在现代大型计算机服务器上的事务性数据管理系统中,利用日志技术来恢复数据时所遇到的性能瓶颈问题,具有以下有益效果I)各事务在并行更新时,写日志时不需要发生任何同步,有效地提高了事务自身的运行效率,并极大地去除了在高并发环境下事务间可能发生的等待关系,提高了系统的吞吐率。2)将原来每条日志中必须保存的前项日志指针Sprev降低到每个日志片一条,将原来每条日志必须保存的页面号降低到同一个日志片内的日志共用,以上措施有效减小了日志的体积,降低了系统的存储成本。


图I是日志文件整体结构示例图。图2是日志片结构示意图。图3是事务写日志流程示意图。图4是系统故障恢复流程不意图。
具体实施例方式下面结合附图对本发明作进一步详细的描述请参阅图1,该图为日志文件的整体组织结构示例图,日志文件被分成一个个大小不等的日志片,每个日志片的长度为外存设备基本单元的整数倍。每个日志片为一个事务所独占,同一事务的不同日志片之间通过日志片上的Sprev域相连。请参阅图2,该图为单个日志片组织结构示意图,每个日志片头上有一些定长域,它们包括I)该日志片的唯一序列编号S,根据此编号可以唯一定位到本日志片。要注意的是,在有些事务性数据管理系统中用绝对位移来定位日志记录,这种情况下S可以不保存;2)该日志的相应事务号A,用于在恢复时构建活动事务表;3)日志片上涉及的数据页面数目Pn ;4)日志片上存放的日志数目Ln。在定长域后面,紧跟着存放数据页面号数组Pa,数组每一项存放一个数据页面号,数组的长度为Pn。在所有数据管理系统中,数据页面号的长度都是一定的,因此根据Pn可以计算出Pa的长度。在数据页面号数组后面存放日志项数组La,由于日志项的长度并不固定,在这里可以采用顺序存放。每条日志的内容都包括以下域I)该日志产生时,相关数据页面上的页面序列号seq,定长;2)数据页面号数组下标i,指向本日志片中数据页面号数组的相应项,定长;3)日志类型U,定长;4)日志更新的数据前项Cp,变长,可以根据U组装和解析;5)日志更新的数据后项Cs,变长,可以根据U组装和解析。
每个事务在内存中开辟自己的私有日志缓冲区,当更新数据页面时,向缓冲中写入日志信息。图3所示为本发明提出的基于上述日志组织结构的事务更新数据页面的方法流程,包括以下步骤301更新开始时,事务首先获得数据页面的排他访问权限,即此时不允许其他事务访问本页面,然后根据更新的类型判断更新是否可以进行。302准备写日志,读取数据页面上的当前页面序列号seq,数据的前项Cp,数据的后项Cs,以及本次更新的类型U。 303判断本页面号在本事务私有日志缓冲区中的页面号数组Pa中是否存在,如果不存在,则调用304,否则直接进入305。由于页面号数组是有序且定长的,因此使用二分查找可以迅速判断本页面号是否已经存在。304向页面号数组Pa中插入本页面的页面号P,要注意这个插入应该仍然保持Pa的有序性。同时这个操作会引起La的后移。305确定页面号在页面号数组中的下标i,构造出完整的日志项。并储存到La的末尾。306更新数据页面,将本事务号记录在页面上,并将页面的seq加I。在系统正常运行时,还要遵循以下两条规则,首先,当一个数据页面被排除出缓冲区时,需要把页面上记录的事务号中的仍然活跃的事务的私有缓冲区写回日志文件;其次,当事务提交时,将自己的私有缓冲区写回日志文件。这两个过程都需要同步,但相比传统协议中每写一条日志都需要同步,性能已经得到了极大的提高。当系统发生故障时,遵照图4示意的流程进行恢复,恢复伊始,在内存中建立一张空的活跃事务表,然后进行以下步骤401循环判断当前是否还有日志片没有被扫描,如果有,则进入402,如果没有,则进入403 ;402扫描下一日志片S,首先判断日志片上的事务号A在活跃事务表中是否存在,如果不存在,则将A加入活跃事务表,并置A的最后一个日志片为S ;如果存在则更新A的最后一个日志片为S ;403循环判断当前日志片上所的日志项是否已经被全部扫描,如果没有,则进入404,否则返回401判断。404扫描下一日志项L,并根据日志项相关联的页面号P获得数据文件中的相应数据页面访问权405检查日志项中的seq和页面上的seq之间的关系,如果前者等于后者,则说明页面正处在更新前的状态,此时进入406,否则返回404,访问下一条日志。406重做这条日志,将日志的数据后项更新到页面上,并且将页面的seq加I。407到此说明重做过程已经完成,此时检查活跃事务表,循环将所有的活跃事务回退。408循环检查当前事务是否已经回退完成,检查的条件是事务的最后一个日志片是否为空,如果没有则进入到409.409回滚当前日志片,将所有的日志项按逆序回退,并将事务的最后一个日志片置为这个日志片的Sprev。
权利要求
1.一种基于事务聚集的日志组织结构,其中 日志文件被顺序组织为若干个日志片,每个日志片的长度可以不一样,但都为外存设备基本块单元长度的整数倍。
2.根据权利I要求所述的日志组织结构,其特征在于,所述日志文件组织结构中的一个日志片存放同一个事务的日志内容,其包括的基本内容至少包括 1)日志片序列编号, 2)事务号 3)页面号数组长度 4)日志项数组长度, 5)同事务的前一个日志片序列编号, 6)页面号数组, 7)日志项数组。
3.根据权利要求I或2所述的日志组织结构,其特征在于,所述日志片中的页面号数组Pa按照页面号排序,以便于通过二分法快速定位访问。
4.根据权利要求I或2所述的日志组织结构,其特征在于,所述日志片中的日志项数组中的单条日志的组织结构至少包括 1)数据页面上的页面序列号, 2)页面号在页面号数组的下标, 3)更新类型, 4)更新数据前项, 5)更新数据后项。
5.一种实现基于权利要求I所述的日志组织结构的恢复协议的方法,其中事务性系统在正常运行时遵循协议要求,并在出错后根据协议进行恢复。
6.根据权利要求5所述的方法,其特征在于,每个事务维护一个私有的日志缓冲区,其结构与日志文件的一个日志片一致,对私有日志缓冲区的访问不需要同步。
7.根据权利要求5或6所述的方法,其特征在于,当事务更新一个数据页面时,向私有日志缓冲区的日志项数组中插入一条新的日志,并可能更新页面号数组。在每个数据页面上维护一个单调递增的页面序列号,更新时序列号被记录到日志中,更新后序列号加1,且事务号被记录在页面上。
8.根据权利要求5或6所述的方法,其特征在于,当事务提交时,它的私有日志缓冲区被写回日志文件,并获得唯一的日志序列编号。
9.根据权利要求5或6所述的方法,其特征在于,当数据缓冲区管理单元将某个数据页面写回数据文件时,如果页面上记录的事务号上有活跃事务号,则该事务的私有日志缓冲区被写回日志文件,并获得唯一的日志序列编号,然后该私有日志缓冲区被重置。
10.根据权利要求5或6所述的方法,其特征在于,当系统出错后进行恢复时,首先进行重做。重做过程为按序扫描日志片及其中所有的日志项数组,并按照日志项内容中记录的页面序列号与相关页面上的页面序列号之间的关系决定是否重做。
11.根据权利要求5或6所述的方法,其特征在于,当重做完成后,需要对所有活跃事务进行回退。回退过程为对于每个活跃事务,逆序扫描所有的日志片,对每个日志片逆序扫描所有的日志项数组,并对日志项数组中的每一条日志进 行回退操作。
全文摘要
本发明公开了一种按事务聚集的日志组织结构及基于其上的恢复协议,可应用于大型计算机上的事务性数据管理系统。日志文件被顺序组织为若干个日志片,每个日志片存放同一个事务的日志内容,每个日志片保留一份事务号及同事务的前项日志片指针,同个日志片上的日志项所涉及的数据页面号以数组形式存储。系统在运行中,各事务只写自己的日志片,并在事务提交时将日志片写入日志文件。恢复时,通过扫描所有的日志片进行重做,以及回退所有活跃事务的日志片进行回退,使系统恢复到持久的、一致的状态。本发明解决了传统事务性数据管理系统中的写日志并发瓶颈问题,并有效减少了系统日志量。
文档编号G06F11/34GK102760161SQ20121019156
公开日2012年10月31日 申请日期2012年6月12日 优先权日2012年6月12日
发明者何清法, 冯柯, 周丽霞, 徐昶, 曹晖, 李阳, 蒋志勇, 蔡华林, 顾云苏, 饶路 申请人:天津神舟通用数据技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1