一种基于闪存的数据库恢复方法

文档序号:6336430阅读:382来源:国知局
专利名称:一种基于闪存的数据库恢复方法
技术领域
本发明涉及一种数据库恢复方法,特别是关于一种基于闪存的数据库恢复方 法。
背景技术
随着闪存的广泛使用,越来越多的数据存储在闪存设备之上。闪存数据管理成 为了一个新的研究领域。基于闪存的数据库技术面临着巨大挑战,引起了业界越来越多 的关注。如果将现有的针对磁盘存储设备设计的数据库技术直接运行在闪存上,在查询 处理中读的速度只提高了 1 10倍,写入的速度只提高了 1 3倍。而事实上,闪存 的读写速度为微秒级,是磁盘读写速度的100倍左右。由此可见,现有的面向传统磁盘 的数据库系统若直接运行在闪存存储器上,并不能充分发挥闪存相较于磁盘的高速读写 带宽,闪存的优异读写性能大打折扣。其原因在于闪存和磁盘两者的物理特性存在巨大 的差异。例如,在闪存上进行数据更新时,由于闪存以页为读写单位而且覆盖写之前必 须擦除整个块,即使一页中的小部分数据发生更新,为了支持现有数据库的原地更新模 式,也需要将该页所在块的数据全部读入内存,然后修改该页数据,再擦除整个块,最 后将内存中的整块的数据写回到闪存中。这极大地降低了更新性能,从而使得数据库的 更新性能急剧下降,系统的事务吞吐率没有得到应有的提高。系统数据库的恢复方法一般有两部分所构成,一是在事务正常处理时能够保留 足够的信息可用于故障恢复;二是在故障发生之后所要采取的措施,将数据库恢复到一 致性的状态,保持事务的原子性和持久性的状态。这两个方面是紧密相联系的,保持的 信息的类型和程度决定了故障发生之后所要采取的步骤的类型和代价的大小。同样,故 障发生之后的操作的类型和代价大小也决定着事务正常处理时额外开销的大小。现有的 数据库恢复方法有以下几种(1)基于日志的恢复技术在磁盘中被广泛采用。这种方法 产生了很多种不同的记录日志和恢复的办法,有很多种不同的提交协议指导着记录日志 和恢复的过程。不同的协议之下,日志记录的设计,日志/数据缓冲区的管理,检查点 机制,记录日志和恢复的过程都很不一样。(2)影子页是另外一种有名的事务恢复技术, 它不需要显式的回滚操作。影子页技术的主要思想是采用异地更新的更新模式,在事 务的生存周期中维护两张页表当前页表(Current Page Table)和影子页表(Shadow Page Table)。当事务开始时,这两张页表是相同的。影子页表在事务执行过程中从不改变, 事务对数据库的更新后的新地址写入当前页表中。当事务提交时,当前页表被写入非易 失性存储器中,并且用一个原子操作置换当前页表和影子页表,于是当前页表成为了影 子页表,下一个事务执行。如果系统崩溃时当前页表丢失,数据库可以用影子页表进行 恢复。(3)架构在操作系统之上的各种系统软件(如数据库管理系统)和应用软件都需要 借助事务(Transaction)这样的接口来应对各种故障和处理从灾难中恢复的问题。如果能 够在文件系统层面提供事务(Transaction)的接口,将会大大降低其上软件为了各自处理 系统故障所付出的冗余代价。
很多先前的工作致力于利用写时复制(copy-on-write)和日志技术在磁盘文件 系统上提供这样的事务接口。但是,由于写时复制(copy-on-write)技术会使得原本在 磁盘上聚簇存放的数据变得十分分散的数据片段(data fragmentation)。在磁盘这样的机 械设备上离散的数据的读写效率十分低下。为了解决这个问题,很多工作采用检查点 (checkpoint)和定期的清除(cleaning)机制来重组离散数据。研究表明这样的重组开销是 十分昂贵的,使得支持事务的文件系统得不偿失。闪存存储器的物理特性很好地适合了 事务文件系统的要求,在闪存文件系统之上支持事务接口成为了很好的选择。事务闪存 (Tansactional Flash)在闪存文件系统之上提供了事务接口,它采用了基于每页的元数据和 圈提交协议来减少额外的提交(commit)记录的性能和空间开销。其主要做法是把每个事 务修改过的页用元数据指针连接起来,形成一个圈。这样,如果事务正常提交,其新版 本就会在一个圈里,如果一个事务的没有正常提交,其修改后的数据页就不能形成一个 圈。圈提交协议用很小的开销在文件系统层面提供了事务接口,但是这个接口不是完善 的,而且垃圾回收、回滚和系统恢复也需要复杂度逻辑支持,其开销也相对较大。

发明内容
针对上述问题,本发明的目的是提供一种能减少对闪存擦除操作,并能使闪存 充分发挥其高效读写特性的基于闪存的数据库恢复方法。为实现上述目的,本发明采取以下技术方案一种基于闪存的数据库恢复方 法,其特征在于它包括一内存、一闪存、一检查点管理模块、一系统启动模块和一系 统关闭模块,所述内存中存储有数据页缓冲区、日志缓冲区和日志区摘要;所述闪存中 存储有日志区、数据区、页表和用来标识所述闪存空间分配状况的位示图;所述检查点 管理模块在所述日志区中设立检查点;所述系统启动模块启动时需要扫描所述日志区, 将获得的日志和数据进行合并;所述系统关闭模块启动时需要在所述日志区中插入一系 列日志,同时进行一系列的操作来完成系统关闭;所述日志缓冲区记录一部分日志,并 把日志刷写到所述闪存上。所述检查点管理模块的检查点的建立步骤如下(1)在日志区中插入一条记录< 检查点编号,活动事务列表,开始>来标志这个检查点的开始;(2)等活动事务列表里面 的所有活跃事务都已经显式提交或者撤销之后,插入另外一条记录<检查点编号,结束> 到日志区中,标志着该检查点的正常结束。所述系统启动模块的启动过程如下(1)检查日志区的尾部,判断是否有标志 正常关机的检查点结束记录 < 检查点编号,结束 > 存在;若无该条记录,则判断在关机 检查点的活跃事务列表中是否存在提交或者撤销的事务,存在则在日志区的尾部添加一 条< 事务编号,放弃 > 记录来显式撤销该事务,然后再插入 < 检查点编号,结束 > 记录来 标志该检查点的结束;相反,则直接插入 < 检查点编号,结束 >记录来标志该检查点的 结束;(2)扫描日志区,在内存中重建日志区摘要。所述系统关闭模块启动时的步骤如下(1)插入标志检查点开始的记录<检查点 编号,活动事务列表,开始 >,开始系统关闭操作;(2)将数据页缓冲区的数据扫出到闪 存的数据区内,并添加相关的日志记录到日志缓冲区中;(3)将页表日志区的日志记录 扫出到闪存的日志区中;(4)插入标志检查点结束的记录 < 检查点编号,结束>。
所述数据页缓冲区的管理是在所述数据页缓冲区存满时,根据替换算法扫出数 据页,并在所述日志缓冲区的尾部增加一条页表日志记录<事务编号,逻辑页地址,物 理页地址 > 记录此页逻辑地址和物理地址之间的映射关系。所述日志缓冲区的管理中,所述日志缓冲区和闪存的日志区都要求顺序写入和 顺序扫出。查找所述页表中页面地址的步骤如下(1)查找日志缓冲区,判断是否有成功 提交事务修改了待查找的逻辑页面,若有,则返回最近的成功提交事务所标识的物理地 址;反之,进入下一步;(2)查找日志区摘要,判断是否有待查找的逻辑页面地址,若 有则返回;反之,进入下一步;(3)查找日志区,判断是否有成功提交事务修改了待查 找的逻辑页面,若有,则返回最近的成功提交事务所表示的物理地址;反之,进入下一 步;(4)在页表里面查找,返回页面地址,结束。所述日志区存满时,将所述页表和日志区进行合并,所述日志区的大小民要满 足如下公式其中,Sf代表所述闪存的大小,Sp代表所述闪存中页面的大小,
P
S1代表页表日志记录的大小。本发明由于采取以上技术方案,其具有以下优点1、本发明由于采用基于闪存 的日志结构,充分发挥了闪存的以页为单位的操作特性,同时减少了对闪存的擦除。因 此系统的事务吞吐率得到了很大的提高,闪存的优越性能得到充分发挥。2、本发明由于 采用基于闪存的数据库恢复方法能够很好地适应闪存存储器的物理特性,在恢复速度和 恢复数据方面都优于传统的针对磁盘数据库的恢复方法。3、本发明没有改变传统的内存 与闪存的两层存储结构,而且同时支持完整的事务接口,其通用性得到了保证,有利于 闪存存储器的快速应用。4、本发明由于是基于磁盘文件系统的应用,可以很方便地运行 在闪存存储设备之上。本发明可以广泛应用于系统数据库的恢复中。


图1是本发明的整体结构示意图;图2是本发明的检查点管理模块中检查点建立流程示意图;图3是本发明的系统启动模块启动流程示意图;图4是本发明的系统关闭模块启动流程示意图;图5是本发明查找页表中页面地址流程示意图。
具体实施例方式下面结合附图和实施例对本发明进行详细的描述。本发明采用异地更新的更新模式,用一个页表去管理闪存上的空闲空间。新的 页表映射地址并不直接写入页表,而是通过日志的方式记录。通过日志的方式使得对于 页表的修改是原子的,以此来获得事务的原子性。如图1所示,本发明包括一内存1、一闪存2、一检查点管理模块3、一系统启动 模块4和一系统关闭模块5,其中,内存1中存储有数据页缓冲区6、日志缓冲区7和日 志区摘要8;闪存2中存储有日志区9、数据区10、页表11和用来标识闪存2空间分配状况的位示图12 ;检查点管理模块3主要在日志区9中设立检查点,即插入一条检查点 日志,为了能够更高效的完成恢复操作;系统启动模块4启动时需要扫描日志区9,将获 得的日志和数据进行合并;系统关闭模块5启动时需要在日志区9中插入一系列日志,同 时进行一系列的操作来完成系统关闭;日志缓冲区7记录一部分日志,然后把日志刷写 到闪存2上,达到永久存储的目的。本发明根据日志内容进行查找,由于日志内容中有 记录数据的逻辑地址和物理地址的映射关系,因此通过查找日志可以找到数据的真实位 置。日志区9对每个页表11的记录均由两列构成,第一列为逻辑页地址,第二列是 该逻辑页地址对应的物理页地址,则该页表日志记录有如下两种类型(1)<事务编号,事务状态>;(2)<事务编号,逻辑页地址,物理页地址>。其中,事务编号是事务的ID编号,是一个事务的唯一标识。事务状态的取值可 以是“提交”或者“放弃”。一条 < 事务编号,逻辑页地址,物理页地址 > 记录把一个 逻辑页地址转化成为一个相应的物理页地址。如图2所示,上述实施例中,检查点管理模块3的检查点在日志区9中用来减少 维护日志区摘要8,以及在合并页表11和日志区9时所要扫描的页表日志记录数目。当 系统被关闭和日志区9足够长时,检查点被插入到日志区9中,则检查点的建立步骤如 下(1)在日志区9中插入一条记录 < 检查点编号,活动事务列表,开始 > 来标志这 个检查点的开始,其中检查点编号是这个检查点的唯一标识,活动事务列表里面包含此 时仍在活跃的事务ID编号列表;(2)等活动事务列表里面的所有活跃事务都已经显式提交或者撤销之后,插入另 外一条记录 < 检查点编号,结束 >到日志区9中,标志着该检查点的正常结束。如图3所示,上述各实施例中,系统启动模块4重新启动时,首先检查上次关机 是否正常,此次开机是否是从一次系统崩溃中重新启动,然后做相应的处理;最后必须 扫描日志区9重建内存1中的日志区摘要8。系统启动模块4的启动过程如下(1)检查日志区9的尾部,判断是否有标志正常关机的检查点结束记录< 检查点 编号,结束 > 存在;如果没有该条记录,说明系统是从一次崩溃中重启,则必须完成上 次没有完成的检查点过程,即对于那些在关机检查点的活跃事务列表中,但是在崩溃发 生时还没有显式提交或者撤销的事务时,则在日志区9的尾部添加一条日志记录 < 事务编 号,放弃>来显式撤销该事务,然后再插入<检查点编号,结束>记录来标志该检查点的 结束;反之,若在崩溃发生时显式提交或者撤销的事务,则直接插入 < 检查点编号,结 束 > 记录来标志该检查点的结束;(2)扫描日志区9,在内存中重建日志区摘要8。如图4所示,上述各实施例中,系统关闭模块5启动时,数据缓冲区6和日志缓 冲区7的所有数据被分别扫出到闪存2上的数据区10和日志区9中。与此同时,一个检 查点插入到日志区9尾部以标志此次正常关机。系统关闭模块5启动时的步骤如下(1)插入标志检查点开始的记录 < 检查点编号,活动事务列表,开始 >,开始系 统关闭操作;
(2)将数据页缓冲区6的数据扫出到闪存2的数据区10内,并添加相关的日志记 录到日志缓冲区7中;(3)将页表日志区9的日志记录扫出到闪存2的日志区9中;(4)插入标志检查点结束的记录 < 检查点编号,结束>。上述步骤中,如果系统故障非正常关机,正常关机时的检查点将不完整,在日 志区9的末尾则找不到相应的标志检查点正常结束的记录。上述各实施例中,数据页缓冲区6的管理是在数据页缓冲区6存满时没有足够的 空间需要淘汰数据页时,根据替换算法扫出数据页,并在日志缓冲区9的尾部增加一条 页表日志记录<事务编号,逻辑页地址,物理页地址>记录此页逻辑地址和物理地址之间 的映射关系。上述各实施例中,日志缓冲区7的管理中,日志缓冲区7和闪存2的日志区9 都要求顺序写入和顺序扫出,如果日志缓冲区7扫出的日志中有标识显式提交事务的日 志记录 < 事务编号,放弃 >,则要从尾至头扫描日志区9,直到最后一个检查点的开始位 置,在日志区摘要8中更新该提交事务修改过的页表地址。如图5所示,上述各实施例中,在查找页表11中页面地址过程时,每次查找一 个逻辑页面地址都必须从头到尾扫描整个页表日志文件。如果需要扫描的日志记录过 多,这个查找过程有可能成为系统新的瓶颈。为了不必要每次都扫描整个日志文件,把 常访问的页表地址在内存1的日志区摘要8中缓冲起来,即日志区摘要8中存放最近最 常访问的页面地址。因此,一个逻辑页面的正确及时的物理页面地址就可能存在四个地 方日志缓冲区7、日志区摘要8、日志区9或者页表11之中。所以查找页表11中页面 地址的步骤如下(1)查找日志缓冲区7,判断是否有成功提交事务修改了待查找的逻辑页面,如 果有,则返回最近的成功提交事务所标识的物理地址;如果没有找到,则进入下一步;(2)查找日志区摘要8,判断是否有待查找的逻辑页面地址,如果有则返回;如 果没有找到则进入下一步;(3)查找日志区9,判断是否有成功提交事务修改了待查找的逻辑页面,如果 有,则返回最近的成功提交事务所表示的物理地址;如果没有找到,则进入下一步;(4)在页表11里面查找,返回页面地址,结束。上述各步骤中,由于日志缓冲区9和日志区摘要8都在内存1中,如果访问的局 部性和日志区摘要8的命中区不至于太差的话,页面地址查找过程就可以在前两个步骤 之后返回。这样这个查找过程就会足够快,而不至于成为系统的瓶颈。经过实验分析表 明,只要花去很小的额外代价,日志区摘要8的命中率就可以达到90%以上。上述各实施例中,当日志区9存满时,则要将页表11和日志区9进行合并,进 而产生新的页表,然后擦除掉日志区9再次存放页表日志记录。定期进行这样的合并过 程也可以减少当日志区摘要8不命中时需要扫描的日志区9的页表日志数目,加快页面地 址的产生过程。为了防止日志区9在整个闪存2的使用寿命之前达到擦除次数限制而报 废,日志区9的大小Sr需要满足如下公式
权利要求
1.一种基于闪存的数据库恢复方法,其特征在于它包括一内存、一闪存、一检查 点管理模块、一系统启动模块和一系统关闭模块,所述内存中存储有数据页缓冲区、日 志缓冲区和日志区摘要;所述闪存中存储有日志区、数据区、页表和用来标识所述闪存 空间分配状况的位示图;所述检查点管理模块在所述日志区中设立检查点;所述系统启 动模块启动时需要扫描所述日志区,将获得的日志和数据进行合并;所述系统关闭模块 启动时需要在所述日志区中插入一系列日志,同时进行一系列的操作来完成系统关闭; 所述日志缓冲区记录一部分日志,并把日志刷写到所述闪存上。
2.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于所述检查点 管理模块的检查点的建立步骤如下(1)在日志区中插入一条记录< 检查点编号,活动事务列表,开始 >来标志这个检查 点的开始;(2)等活动事务列表里面的所有活跃事务都已经显式提交或者撤销之后,插入另外一 条记录 < 检查点编号,结束 > 到日志区中,标志着该检查点的正常结束。
3.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于所述系统启 动模块的启动过程如下(1)检查日志区的尾部,判断是否有标志正常关机的检查点结束记录<检查点编号, 结束>存在;若无该条记录,则判断在关机检查点的活跃事务列表中是否存在提交或者 撤销的事务,存在则在日志区的尾部添加一条 < 事务编号,放弃 > 记录来显式撤销该事 务,然后再插入 <检查点编号,结束 >记录来标志该检查点的结束;相反,则直接插入< 检查点编号,结束 > 记录来标志该检查点的结束;(2)扫描日志区,在内存中重建日志区摘要。
4.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于所述系统关 闭模块启动时的步骤如下(1)插入标志检查点开始的记录< 检查点编号,活动事务列表,开始 >,开始系统关 闭操作;(2)将数据页缓冲区的数据扫出到闪存的数据区内,并添加相关的日志记录到日志缓 冲区中;(3)将页表日志区的日志记录扫出到闪存的日志区中;(4)插入标志检查点结束的记录< 检查点编号,结束>。
5.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于所述数据页 缓冲区的管理是在所述数据页缓冲区存满时,根据替换算法扫出数据页,并在所述日志 缓冲区的尾部增加一条页表日志记录<事务编号,逻辑页地址,物理页地址>记录此页逻 辑地址和物理地址之间的映射关系。
6.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于所述日志缓 冲区的管理中,所述日志缓冲区和闪存的日志区都要求顺序写入和顺序扫出。
7.如权利要求1所述的一种基于闪存的数据库恢复方法,其特征在于查找所述页 表中页面地址的步骤如下(1)查找日志缓冲区,判断是否有成功提交事务修改了待查找的逻辑页面,若有,则 返回最近的成功提交事务所标识的物理地址;反之,进入下一步;(2)查找日志区摘要,判断是否有待查找的逻辑页面地址,若有则返回;反之,进 入下一步;(3)查找日志区,判断是否有成功提交事务修改了待查找的逻辑页面,若有,则返回 最近的成功提交事务所表示的物理地址;反之,进入下一步;(4)在页表里面查找,返回页面地址,结束。
8.如权利要求1或5所述的一种基于闪存的数据库恢复方法,其特征在于所述日志 区存满时,将所述页表和日志区进行合并,所述日志区的大小&要满足如下公式
全文摘要
本发明涉及一种基于闪存的数据库恢复方法,其特征在于它包括一内存、一闪存、一检查点管理模块、一系统启动模块和一系统关闭模块,内存中存储有数据页缓冲区、日志缓冲区和日志区摘要;闪存中存储有日志区、数据区、页表和用来标识闪存空间分配状况的位示图;检查点管理模块在日志区中设立检查点;系统启动模块启动时需要扫描日志区,将获得的日志和数据进行合并;系统关闭模块启动时需要在日志区中插入一系列日志,同时进行一系列的操作来完成系统关闭;日志缓冲区记录一部分日志,并把日志刷写到闪存上。本发明能减少对闪存的擦除,并充分发挥闪存的优越性。本发明可以广泛应用于系统数据库的恢复中。
文档编号G06F11/14GK102012849SQ201010552789
公开日2011年4月13日 申请日期2010年11月19日 优先权日2010年11月19日
发明者向锂, 孟小峰, 范玉雷 申请人:中国人民大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1