基于阴影分页的日志段目录的制作方法

文档序号:6380375阅读:124来源:国知局
专利名称:基于阴影分页的日志段目录的制作方法
技术领域
此处所述主题涉及利用阴影分页作为数据存储应用的部分以提供日志段(logsegment)目录的技术。
背景技术
数据库以同步方式使用日志以将对对应数据执行的操作存储在日志中,并同时异步地将数据写入相应的数据区域。在崩溃或其他数据恢复事件中,数据区域被恢复到可能的较旧状态。重放日志将使得数据库成为最后提交的(commited)状态。记录数据典型地存储在固定大小或大小可变的日志片段上,可以表示为相应磁盘上的操作系统文件。每个日志段可以具有相关元数据,诸如段中第一和最后条目的日志序列号。元数据还可以包括日志段的当前状态,诸如打开、关闭、自由备份。

发明内容
在一个方面,在数据存储应用中开始重放数据事务。描述多个日志段元数据的日志段目录的页面被加载到内存。此后,去除日志段目录中的冗余页。然后基于日志段目录确定:需要访问哪些日志段。访问这些日志段以执行日志重放。每个日志段的元数据可以包括如下的一个或多个:日志段中第一条目和最后条目的日志序列号,以及日志段的当前状态。日志段目录可以分成固定大小的或可变大小的页面。日志段目录的每个页面可以包括如下的一个或多个:由页面寻址的第一日志段的索引、页面生成值和校验和值、以及固定数量的日志段元数据。在日志段目录中去除冗余页面可包括:去除和另一页面具有相同索引和正确的校验和值但具有较低的页面生成值的页面。此外,在日志段目录中去除冗余页可以包括:去除具有不正确的校验和值的页面。所移除的冗余页面的辅助存储器上的物理位置可以被放在自由列表数据结构,用于跟踪在辅助存储器上的空闲物理页。可以修改特定日志段的元数据条目。该修改可以包括:修改内存中日志段的元数据,增加当前页面生成计数器的值,设置日志段的页面生成值为当前页面生成计数器,将日志段新页面的新的物理辅助存储地址分配为取自空闲列表数据结构的物理辅助存储位置,计算日志段的新的校验和,并向空闲列表数据结构添加日志段的旧页面的之前物理辅助存储位置。可以响应于请求而修改元数据以执行从包括如下的组中选择的操作:例如关闭日志段、打开新的日志段、设置日志段备份标志和标记日志段为空闲。在关联方面,日志段目录的页面被加载到内存中。日志段目录包含多个日志段的元数据,以至于日志段目录的每个页面包含:由页面寻址的第一日志段的索引、页面生成值、校验和值以及固定数量的日志段元数据。内存中第一日志段的元数据然后被修改。增加当前页面生成计数器的值,日志段的页面生成值被改变为当前生成计数器值。日志段的新页面的新的物理辅助存储位置被分配到取自空闲列表数据结构的物理辅助存储位置。为日志段计算校验和。此外,日志段旧页面的之前物理辅助存储位置被移动到空闲列表数据结构。还描述了制造的产品,其包括在非临时计算机可读媒体上永久存储的计算机可执行指令,当由计算机执行时,使得计算机执行此处的操作。类似地,还描述了计算机系统,其可包括处理器和耦合到处理器的存储器。存储器可暂时或永久存储一个或多个程序,使得处理器执行一个或多个此处所述操作。此外,由方法详述的操作可以由单个计算系统或分布在两个或多个计算系统之间的一个或多个数据处理器实施。此处所述主题提供了许多优点,包括更快的数据恢复过程。例如,使用常规技术,日志段元数据被存储为日志段内明确定义位置(例如,日志段的开始,等等)的页面。诸如状态变化的元数据改变需要相应地修改页面。当使用这些类型的日志段重新启动数据库时,首先必须为元数据信息扫描(至少部分)所有日志段,这将减缓数据恢复过程。此处所述主题的一个或多个变化的细节在附图和如下描述中提出。此处所述主题的其他特点和优势将从如下描述和附图以及权利要求中变得更加明显。


图1是示出包括数据存储应用的系统的示意图;图2是示出使用日志段目录的数据恢复的处理流程图;图3是示出图1的系统的细节的示意图;以及图4是示出在日志段目录中日志段元数据修改的示意图。在不同图中,相似的附图标记表示相似组件。
具体实施例方式图1显示系统100的示例,其中计算系统102 (其可以包含可被配置、在一个或多个网络等链接的一个或多个可编程处理器)执行数据存储应用104的一个或多个模块、软件组件等。数据存储应用104可以包含一个或多个数据库、企业资源计划、分布式存储系统(例如,可从CA桑尼韦尔的NetApp获得的NetApp文件归档器)等。一个或多个模块、软件组件等可以访问计算系统102的本地用户以及远程用户从一个或多个客户端机器106经过网络连接110访问计算系统102。一个或多个第一个模块产生的一个或多个用户界面屏幕可以显示给用户,或通过本地显示器或通过和客户端机器106之一关联的显示器。数据存储应用104的数据单元可以暂时性存储在持久层112(例如页面缓冲或其他类型的临时持久层),它可以以存储页的形式例如通过输入/输出组件116写数据到一个或多个存储器114。一个或多个存储器114可以包括一个或多个物理存储媒体或设备(如硬盘驱动器、持久闪存、随机存取存储器、光学媒体、磁性媒体等),经配置写数据以用于较长期的存储。应该注意:存储器114和输入/输出组件116可以包含在计算系统102中,尽管他们在图1中被显示为计算系统102的外部。在较长期存储器114中保留的数据可以页面组织,每个都有分配给它一个限定数量的存储空间。在有些实施方式中,分配给每个页面的存储空间量可以是常数和固定的。然而,其他的实施方式中,分配给每个页面的存储空间量可以变化,其也在当前主题的范围内。图2是处理流程图200,其中在210处,启动数据存储应用中的数据事务重放。接下来,在220处,日志段目录的页被加载到内存中。日志段目录包含描述多个日志段的元数据。在230处,日志段目录中的冗余页面被移除。此后,在340处,基于日志段目录确定哪些日志段部分需要访问,这样,在350处,可访问日志段以使能重放。图3显示符合当前主题一个或多个特征的软件架构300。可以实现在一个或多个硬件和软件上的数据存储应用104可以包括一个或多个数据库应用、网络附加存储系统等。根据当前主题的至少某些实施方式,该数据存储应用104可以包括或例如通过持久接口 302与持久层112或其他类型的存储缓冲器接口连接。持久层112中的页面缓冲器304可以存储一个或多个逻辑页面306,且可选地可以包括阴影页面、激活页面等等。保留在持久层112的逻辑页面306可以通过输入/输出组件116写入到存储器(如较长期存储器等)114,它可以是软件模块、一个或多个软件和硬件中实施的子系统等。存储器114可以包括一个或多个数据卷310,可在其中的物理存储块处分配存储的页面312。在某些实施方式中,数据存储应用104可以包含或不同地与页面管理器314和/或保存点管理器316通信。页面管理器314可以与持久层112处的页面管理模块320通信,持久层112可以包括监视页面状态信息324的空闲块管理器322,例如存储器114中物理页面的状态和持久层112中(且可选地在页面缓冲器304中)的逻辑页面。保存点管理器316可以与持久层204处的保存点协调器326通信以处理保存点,用于为可能崩溃后的重启创建数据库的一致持久状态。在数据存储应用104的某些实施方式中,持久层112的页面管理模块可以实现阴影分页(paging)。页面管理模块320中的空闲块管理器322可以维持物理页的状态。该页面缓冲器304可以包括如此处论述操作的固定的页面状态缓冲器。转换器组件340,可以是页面管理模块320的部分或与其通信,可以负责在写到存储器114的逻辑和物理页面之间的映射。该转换器340可以维持逻辑页面的当前映射到转换器表342中的相应物理页面。该转换器340可以保持逻辑页面306到一个或多个转换器表342中的相应物理页面的当前映射。当从存储器114读出逻辑页面306时,要加载的存储页面可以使用转换器340从一个或多个转换器表342中查询。当保存点之后逻辑页面第一次写入存储器114时,新的空闲物理页被分配给该逻辑页面。空闲块管理器322将新物理页标记为“使用”,而新的映射被存储在一个或多个转换器表342中。持久层112可以确保:数据存储应用104中做出的更改是持久的以及数据存储应用104可以恢复到重新启动后最近提交状态。将数据写入存储器114不需要与写事务的结束同步。因此,未提交的更改可以写入磁盘,以及当写事务完成时已提交的更改可还没有被写入到磁盘。系统崩溃后,还没有完成的事务进行的改变可以回滚(roll back)。已提交的事务发生的变化不应该在该过程中丢失。记录器(logger)组件344还可以包括在线性日志中对数据存储应用的数据进行的更改。记录器组件344可以应用在恢复期间以从最后保存点重放操作,确保在恢复过程结束时回滚到仍打开的事务之前,所有操作被应用到数据以及具有记录“提交”记录的事务被提交。使用一些数据存储应用,将数据写入磁盘不一定与写事务的结束同步。情况可能发生在未提交的更改写入磁盘时,同时,当写事务完成时已提交的更改还没有写到磁盘上。系统崩溃后,由未完成事务做出的改变必须回滚,以及由提交事务做出的改变必须不丢失。为了确保已提交的更改不会丢失,无论何时进行改变,重做日志信息可以由记录器组件344写入。最迟当事务结束时该信息可以写入磁盘。日志条目可以被保存在单独日志卷,而一般数据被写入数据卷。使用重做日志,即使相应的数据页没有写入磁盘,已提交的更改也可以恢复。对于取消未提交的更改,持久层112可以使用撤销日志条目(来自一个或多个日志)和阴影分页的组合。持久接口 302可以处理存储器(例如,内存中的存储等)读写请求。持久接口 302还可以提供写的方法,用于写入具有日志和不具有日志的数据。如果使用日志写操作,则持久接口 302启动记录器344。此外,记录器344提供接口,允许存储器(例如,内存中的存储等)直接添加日志条目到日志队列。记录器接口还提供方法来请求内存中日志队列的日志条目涌入(flush)到磁盘。日志条目包含日志序列号,日志条目的类型和事务的标识符。根据操作类型,附加信息被记录器344记录。例如对于类型“更新”的条目,这将是受影响记录和修改后的图像数据的识别。当数据应用104重新启动时,需要处理日志条目。为了加快该过程,重做日志并不总是从开始处理。相反,如上所述,可以定期执行保存点,自从上个保存点做出写入到磁盘的所有改变(例如,在内存中,等等)。当启动系统时,只有上个存储点之后创建的日志需要被处理。在接下来的备份操作之后,可以移除存储点位置之前的旧日志条目。当启动记录器344写入日志条目时,它不立即写入到磁盘。相反,它可以把日志条目放到内存中的日志队列中。日志队列中的条目可以最迟当相应事务完成(提交或中止)时写入磁盘。为了保证已提交的更改不会丢失,相应的日志条目涌入到磁盘之前,提交操作并不成功结束。将日志队列条目写入磁盘也可能由其他事件触发,例如当日志队列页面满时或当执行保存点时。使用当前主题,记录器344可以将数据库日志(或者此处仅仅是指一个“日志”)以自然顺序(例如,依次等)连续写入内存缓冲器中。数据库日志可以经过分段,以至于它包括多个日志段。在这种情况下,记录器344可以另外生成和保持日志段目录。日志段目录可以为日志段目录中的每个日志段保持元数据。该元数据例如可以包括:该段中的第一和最后条目的日志序列号以及描述日志段的当前状态(例如,打开,关闭、备份、空闲等等)的数据。日志段目录可以分成固定大小的页,其是多个极小的(atomic)I/O单元(B卩,底层硬件的扇区大小)。每个这样的页面可以包含日志段的固定数量的元数据信息。每个页面的元数据信息的数量可以计算为metadata_per_page = (page_size_ (page_header)的大小)/(元数据)的大小。每个页面都可以具有包含以下信息的标题:(i)由该页面寻址的第一日志段的索引(对应该日志段的页面中的第一元数据),这自然是metadata_per_page的倍数;(ii)页面生成值(其可基于增加的页面生成计数器);以及(iii)校验和值。为了寻址η个日志段的最大值,至少需要page_count = (n+metadata_per_page-1) /metadata_per_page页面。这将对应于零冗余以及原则上当日志段目录的一页覆盖在所有情况下是极小时会生效。然而,由于各种原因,覆盖的一页不能保证是极小的。因此,冗余是必要的。通过添加至少一个额外的/冗余页到日志段目录(即,日志段目录不仅仅包含page_count页,等等)而添加冗余。
现在,当日志段目录打开时,日志段目录的所有页可以被加载到内存中。因为有比需要更多的页面,所以具有相同索引值的一个或多个页面出现在日志段目录中。在这种情况下,具有最高的页面生成值和正确校验和值的页面将被挑选出,而具有相同索引的其他页面(例如,阴影页面等)将被丢弃,而在日志段目录中他们的物理位置将被放置到空闲列表数据结构(其中包含日志段目录中的当前空闲页面的物理位置)。之后当前页面生成计数器可被设置为所有页面生成的最大值。当请求日志段目录执行操作时,诸如关闭日志段、打开新的日志段、设置日志段备份标志或标记日志段为空闲,则对应日志段的元数据条目需要修改和保存。参照图4的处理流程图400,执行以下操作。首先,在410处修改日志段的元数据。之后在420处增加当前页面生成计数器,日志段的页面生成值在430处被设置为当前页计数器值。随后,在440处,从用于内存分配的空闲列表数据结构获得日志段修改页面的新物理辅助存储位置。然后在450处计算日志段的新校验和。日志段的修改后的页面之后在460处被写入到新的物理辅助存储位置(正如之前从空闲列表数据结构获取)。此外,在470处,日志段之前页面版本的旧物理辅助存储位置可被移动到空闲列表数据结构。如果定义几个阴影页面,则可以并行完成日志段目录上的几个操作(假设他们寻址不同的页),并且也可以并行执行适当的同步I/o操作,用以增加吞吐量。如果操作由于停电或数据库崩溃失败,则该操作写入的页面只被部分写入。在下次运行读取日志段目录期间,这个不完整的页面将被忽略,并被认为是阴影页。该页面的旧版本(由于它在操作之前在开始执行的日志段目录上)仍出现在某些其他物理位置上的日志段目录中(即能够易于恢复日志段目录)。此处所述主题的各方面可以在根据所需配置的系统、装置、方法和/或产品中实施。特别是,此处所述主题各种各样的实施方式可以实现在数字电子电路、集成电路、专用集成电路(ASIC)、计算机硬件、固件、软件和/或其组合中。这些不同的实现可以包括在可编程系统上可执行和/或可解释的一个或多个计算机程序上的实现,所述可编程系统包括至少一个可编程处理器,其可以是专用的或通用的,其耦合以从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令并向存储系统、至少一个输入设备和至少一个输出设备传送数据和指令。这些计算机程序(也可以称为程序、软件、软件应用程序、应用程序、组件或代码)包括用于可编程处理器的机器指令,可用高级程序和/或面向对象的编程语言和/或汇编/机器语言实现。如此处所用,术语“机器可读介质”是指任何计算机程序产品、装置和/或设备,例如磁盘,光盘、存储器和可编程逻辑器件(PLD),用于提供机器指令和/或数据到可编程处理器,其包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”是指用于向可编程处理器提供机器指令和/或数据的任何信号。该机器可读介质可以存储这种非暂时的机器指令,例如非瞬态固态存储器或磁硬盘驱动或任何等价的存储介质。该机器可读介质可以以瞬态方式选择性地或另外存储这种机器指令,例如处理器高速缓存或与一个或多个物理处理器核相关联的其他随机存取存储器。此处所述的主题可以实现在包括后端组件的计算系统中,例如一个或多个数据服务器,或者实现在包含中间件组件的计算系统中,例如一个或多个应用程序服务器,或者实现在包括前端组件的计算系统中,例如具有图形用户界面或Web浏览器的一个或多个客户端计算机,用户可以通过其与此处所述主题的实施方式交互,或实现在这种后端,中间件或前端组件的任何组合中。客户端和服务器通常是但不限于彼此远离,并典型地通过通信网络交互,尽管系统组件可以数字数据通信的任何形式或介质互相联系。通讯网络的例子包括但不限于局域网(“LAN”)、广域网(“WAN”)和互联网。由于运行在各自电脑上的计算机程序并彼此具有客户机-服务器的关系而出现了客户机和服务器之间的关系。以上描述所提出的实施方式并不代表符合此处所述主题的所有实施方式。相反,他们仅仅是符合与所述主题相关的方面的一些例子。尽管已在此详细分析一些变化,但其他的修改或添加的内容都是可能的。特别是,除了此处所提出的,可以提供进一步的特性和/或变化。例如,上面描述的实施方式可以指向公开特征的各种组合和子组合,和/或此处公开的进一步的一个或更多特性的组合和子组合。此外,附图和/或此处所述的逻辑流不一定需要显示的特定顺序或连续的顺序来获得理想的结果。如下权利要求的范围可包括其他实施方式或实施例。
权利要求
1.包括存储指令的非临时机器可读介质的计算机程序产品,存储的指令当由至少一个可编程处理器执行时,导致至少一个可编程处理器执行操作,包括: 启动数据存储应用中的数据事务的重放; 将日志段目录的页面加载到内存中,所述日志段目录描述多个日志段的元数据; 去除在日志段目录中的冗余页面; 基于日志段目录确定哪些日志段需要访问;以及 访问需要访问的日志段以执行日志重放。
2.如权利要求1所述的计算机程序产品,其中每个日志段中的元数据包括:日志段中第一条目和最后条目的日志序列号,以及日志段的当前状态。
3.如权利要求1所述的计算机程序产品,其中日志段目录分成固定大小的页面。
4.如权利要求1所述的计算机程序产品,其中日志段目录的每个页面包含:由页面寻址的第一日志段的索引、页面生成值和校验和值以及固定数量的日志段元数据。
5.如权利要求4所述的计算机程序产品,其中去除在日志段目录中的冗余页面包括:去除和另一页面具有相同索引和正确校验和值但具有较低页面生成值的页面。
6.如权利要求5所述的计算机程序产品,其中去除在日志段目录中的冗余页面包括:去除具有不正确校验和值的页面。
7.如权利要求所述I的计算机程序产品,其中去除冗余页面的辅助存储器的物理位置被置于空闲列表数据结构,用来跟踪辅助存储器上的空闲物理页。
8.如权利要求 4所述的计算机程序产品,其中操作进一步包括:修改特定的日志段元数据条目。
9.如权利要求8所述的计算机程序产品,其中修改日志段的元数据条目包括: 修改存储中日志段的元数据; 增加当前页面生成计数器的值; 设置日志段的页面生成值为当前生成计数器值; 分配日志段新页面的新的物理辅助存储位置为取自空闲列表数据结构的物理辅助存储位置; 计算日志段的新校验和; 将修改后的页面写入到新的物理辅助存储位置;以及 添加日志段的旧页面的之前物理辅助存储位置到空闲列表数据结构。
10.如权利要求8所述的计算机程序产品,其中响应于执行选自包括如下的组的操作的请求,该元数据被修改:关闭日志段、打开新日志段、设置日志段备份标志和标记日志段为空闲。
11.一种方法,包括: 启动数据存储应用中数据事务的重放; 加载日志段目录的页面到内存中,日志段目录描述多个日志段的元数据; 去除日志段目录中的冗余页面; 基于日志段目录确定哪些日志段需要访问;以及 访问需要访问的日志段以执行日志重放。
12.如权利要求11所述的方法,其中每个日志段中的元数据包括:日志段中第一条目和最后条目的日志序列号,以及日志段的当前状态。
13.如权利要求11所述的方法,其中日志段目录分成固定大小的页面。
14.如权利要求11所述的方法,其中日志段目录的每个页面包含:由页面寻址的第一日志段的索引、页面生成值和校验和值以及固定数量的日志段元数据。
15.如权利要求14所述的方法,其中在日志段目录中去除冗余页面包括:去除和另一页面具有相同索引和正确的校验和值但是具有较低的页面生成值的页面。
16.如权利要求15所述的方法,其中在日志段目录中去除冗余页面包括:去除具有不正确校验和值的页面。
17.如权利要求11所述的方法,其中去除冗余页面的辅助存储器的物理位置被置于空闲列表数据结构,用来跟踪辅助存储器上的空闲物理页。
18.如权利要求14所述的方法,还包括修改特定日志段的元数据条目;其中响应执行选自包括如下的组的操作的请求,该元数据被修改:关闭日志段、打开新日志段、设置日志段备份标志和标记日志段为空闲。
19.如权利要求18所述的方法,其中修改日志段的元数据条目包括: 修改内存中日志段的元数据; 增加当前页面生成计数器的值; 设置日志段的页面生成值为当前生成计数器值; 分配日志段的新页 面的新的物理辅助存储位置为取自空闲列表数据结构的物理辅助存储位置; 计算日志段的新校验和; 将修改后的页面写入到新的物理辅助存储位置;以及 将日志段的旧页面的之前物理辅助存储位置添加到空闲列表数据结构。
20.包括存储指令的非临时机器可读介质的计算机程序产品,存储的指令当由至少一个可编程处理器执行时,导致至少一个可编程处理器执行操作,包括: 加载日志段目录的页面到内存中,日志段目录包括多个日志段的元数据,其中日志段目录的每个页面包含:由页面寻址的第一日志段的索引、页面生成值、校验和值以及固定数量的日志段元数据; 修改内存中第一日志段的元数据; 增加第一日志段的当前页面生成计数器的值; 设置日志段的页面生成值为当前生成计数器值; 分配日志段的新页面的新的物理辅助存储位置为取自空闲列表数据结构的物理辅助存储位置; 计算日志段的新校验和; 将修改后的页面写入到新的物理辅助存储位置;以及 将日志段的旧页面的之前物理辅助存储位置添加到空闲列表数据结构。
全文摘要
在数据存储应用中启动数据事务的重放。将描述多个日志段的元数据的日志段目录的页面加载到内存中。此后,去除在日志目录中的冗余页面。然后基于日志段目录确定需要访问哪些日志部分。这些日志段经访问以执行日志重放。还描述了相关设备、系统、技术和产品。
文档编号G06F11/14GK103198088SQ20121043336
公开日2013年7月10日 申请日期2012年9月28日 优先权日2011年11月7日
发明者I·施赖特 申请人:Sap股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1