著录项信息
专利名称 | 借助于非失败节点的并行恢复 |
申请号 | CN200480021752.0 | 申请日期 | 2004-07-28 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2006-09-06 | 公开/公告号 | CN1829974 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F11/20 | IPC分类号 | G;0;6;F;1;1;/;2;0;;;G;0;6;F;9;/;4;6查看分类表>
|
申请人 | 甲骨文国际公司 | 申请人地址 | 美国加利福尼亚州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 甲骨文国际公司 | 当前权利人 | 甲骨文国际公司 |
发明人 | 罗杰·班福德;萨希坎什·钱德拉塞克拉;安杰洛·普鲁希诺 |
代理机构 | 北京康信知识产权代理有限责任公司 | 代理人 | 余刚;尚志峰 |
摘要
本发明描述了用于提高无共享数据库系统的性能的各种技术,其中,运行该无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。特别地,提供了用于使用并行地操作的多个恢复节点来恢复由失败节点拥有的数据的技术。由失败节点拥有的数据被再分配到能够存取该数据所在的共享磁盘的恢复节点。失败节点的恢复日志由恢复节点读取,或由将恢复任务分配给恢复节点的协调者程序读取。
1.一种用于在无共享系统中管理数据的方法,所述方法包括以下步骤:
在能够存取多个节点的持久存储器上保持多个持久数据项,所述持久数据项包括存储于所述持久存储器上的特定位置的特定数据项;
将所述多个持久数据项中的每个的独占所有权分配给所述多个节点中的一个,其中,所述多个节点的特定节点被分配有所述特定数据项的独占所有权;
当任何节点想要执行涉及所述特定数据项的操作时,由于所述特定数据项由所述特定节点独占拥有,因此期望所述操作被执行的所述节点将所述操作传送至所述特定节点,用于所述特定节点对所述特定数据项执行所述操作;
响应于涉及由单个节点独占拥有的一组持久数据项的失败,执行以下步骤:
向两个或多个恢复节点中的每个分配在所述失败中涉及的所述一组持久数据项的子集的独占所有权;以及
所述两个或多个恢复节点中的每个恢复节点对被分配到所述恢复节点的持久数据项的所述子集执行恢复操作。
2.根据权利要求1所述的方法,其中,所述失败是存储所述一组持久数据项的持久存储装置的介质失败。
3.根据权利要求1所述的方法,其中:
所述失败是具有所述一组持久数据项的独占所有权的所述节点的失败;并且
所述分配的步骤包括,向两个或多个恢复节点中的每个分配由所述失败节点独占拥有的所述持久数据项的子集的独占所有权。
4.根据权利要求3所述的方法,其中:
所述两个或多个恢复节点包括第一恢复节点和第二恢复节点;并且
由所述第一恢复节点对被独占地分配到所述第一恢复节点的数据的所述子集执行的所述恢复操作的至少一部分,与由所述第二恢复节点对被独占地分配到所述第二恢复节点的数据的所述子集执行的所述恢复操作的至少一部分并行地执行。
5.根据权利要求3所述的方法,进一步包括:
将所述多个持久数据项组织成多个存储段;以及
在所述多个存储段和所述多个节点之间建立映射,其中,每个节点均具有属于映射到所述节点的所有存储段的所述数据项的独占所有权;以及
基于所述映射确定哪个数据项需要被恢复。
6.根据权利要求5所述的方法,进一步包括:
对所述映射执行第一遍扫描,以确定哪个存储段具有需要被恢复的数据项;
对所述映射执行第二遍扫描,以对需要被恢复的所述数据项执行恢复;以及
在执行所述第一遍扫描之后并且在完成所述第二遍扫描之前,使得能够存取属于不必被恢复的所有存储段的数据项。
7.根据权利要求3所述的方法,其中,所述两个或多个恢复节点中的每个恢复节点基于与所述失败节点相关的恢复日志,来对所述持久存储器执行所述恢复操作。
8.根据权利要求7所述的方法,进一步包括以下步骤,恢复协调器扫描与所述失败节点相关的所述恢复日志,并且将恢复记录分配到所述两个或多个恢复节点。
9.根据权利要求7所述的方法,其中,所述两个或多个恢复节点中的每个扫描与所述失败节点相关的所述恢复日志。
10.根据权利要求3所述的方法,其中:
所述两个或多个恢复节点中的每个恢复节点执行恢复操作的所述步骤包括,对块应用撤销记录;并且
所述方法进一步包括以下步骤,追踪哪个撤销记录已经被应用。
11.根据权利要求5所述的方法,进一步包括以下步骤,在所述失败之前,所述失败节点在由所述失败节点生成的重作记录中储存存储段号,所述存储段号表示与所述重做记录相关的所述数据项属于哪个存储段。
技术领域\n本发明涉及用于管理在共享磁盘硬件上运行的无共享(shared-nothing)数据库系统中的数据的技术。\n背景技术\n多处理计算机系统一般分为三类:一切资源共享(shared-everything)系统、共享磁盘系统、以及无共享系统。在一切资源共享系统中,所有处理器上的程序能够直接存取系统中的所有易失存储装置(下文中一般称为“存储器”)以及所有非易失存储装置(下文中一般称为“磁盘”)。因此,要求不同的计算机组件之间的高级布线,以提供一切资源共享的功能。另外,就一切资源共享结构而言还存在可伸缩性限制。\n在共享磁盘系统中,处理器和存储器被分组成节点。共享磁盘系统中的每个节点本身可以构成包括多处理器和多存储器的一切资源共享系统。所有处理器上的程序能够存取系统中的所有磁盘,但是只有属于特定节点的处理器上的程序能够直接存取在特定节点内的存储器。共享磁盘系统一般地要求比一切资源共享系统少的布线。因为所有节点能够存取所有数据,所以共享磁盘系统还能够容易地适应不平衡的工作负荷条件。然而,共享磁盘系统易受相关系统开销(coherence overhead)的影响。例如,如果第一节点已经修改了数据并且第二节点想要读取或者修改该相同的数据,则必须采取多个步骤以确保将数据的正确版本提供给第二节点。\n在无共享系统中,所有的处理器、存储器、和磁盘被分组成节点。如同在共享磁盘系统中一样,在无共享系统中,每个节点本身可以构成一切资源共享系统或共享磁盘系统。只有在特定节点上运行的程序才能够直接存取特定节点内的存储器和磁盘。三种一般类型的多处理系统的无共享系统通常要求各种系统组件之间的最少量的布线。然而,无共享系统最易受不平衡的工作负荷条件的影响。例如,在特定任务期间待被存取的所有数据可能都存在于特定节点的磁盘上。因此,只有在该节点内运行的程序可以用于执行工作颗粒(work granule),即使其他节点上的程序都保持空闲状态。\n在多节点系统上运行的数据库一般分为两类:共享磁盘数据库和无共享数据库。\n共享磁盘数据库\n共享磁盘数据库基于以下的假设来协调工作:假设由数据库系统管理的所有数据对于数据库系统可用的所有处理节点而言都可见。因此,在共享磁盘数据库中,服务器可以向任何节点上的程序分配任何工作,而与包含在工作期间将被存取的数据的磁盘的位置无关。\n因为所有节点都能够存取相同的数据,并且每个节点都具有其自己的专用缓存,因此相同数据项的多个版本可以存在于任意数量的多个节点的缓存中。遗憾的是,这意味着当一个节点要求特定数据项的特定版本时,该节点必须与其他节点相协调以使数据项的特定版本被传送至请求节点。因而,共享磁盘数据库被认为以“数据传送”的原理运行,其中,数据必须被传送到已经被指定处理该数据的节点。\n这样的数据传送要求可能导致“查验(ping)”。特别地,当由一个节点所需的数据项的拷贝存在于另一节点的缓存中时,就会出现查验。查验可能要求将数据项写入磁盘,然后从磁盘读取。查验所必需的磁盘操作的性能能够显著地降低数据库系统的性能。\n共享磁盘数据库既可以在无共享计算机系统上运行,也可以在共享磁盘计算机系统上运行。为了在无共享计算机系统上运行共享磁盘数据库,可以将软件支持程序(software support)添加到操作系统或者可以提供其它硬件以允许程序能够存取远程磁盘。\n无共享数据库\n无共享数据库假设程序只能在数据被包含在与程序属于相同节点的磁盘上时存取该数据。因此,如果特定节点想要对由另一节点所拥有的数据项执行操作,则特定节点必须向另一节点发送请求,请求另一节点执行该操作。因而,无共享数据库被认为执行“功能传送”,而不是在节点之间传送数据。\n因为任何给定的数据块都仅由一个节点拥有,因此只有这一个节点(数据的“所有者”)将永久在其缓存中具有数据的拷贝。因此,无需在共享磁盘数据库系统中所要求的缓存相关性机制类型。另外,由于不要求拥有数据项的节点将数据项的缓存版本保存到磁盘以使另一节点然后能够将该数据项存入其缓存,因此无共享系统不遭受与查验相关的性能损失。\n无共享数据库可以在共享磁盘多处理系统和无共享多处理系统上运行。为了在共享磁盘机器上运行无共享数据库,可以提供一种机制用于对数据库进行分区(partitioning),并且将每个分区的所有权分配给特定节点。\n只有有所有权的节点可以对数据块进行操作的事实意味着无共享数据库中的工作负荷可能变得极度不平衡。例如,在十个节点的系统中,所有工作要求的90%可能涉及由节点中的一个所拥有的数据。因此,该一个节点工作过度,而其他节点的计算资源未被充分使用。为了“重新平衡”工作负荷,可以使无共享数据库脱机,并且数据(及其所有权)可以在节点之间被再分配。然而,该过程涉及潜在地移动大量数据,并且可能仅仅临时的解决工作负荷的失衡。\n数据库系统中的失败\n当出现阻止数据库服务器继续工作的问题时,可能会发生数据库服务器失败。数据库服务器失败可能由诸如停电的硬件问题、或诸如操作系统或数据库系统崩溃的软件问题产生。数据库服务器失败还可以预期地发生,例如,当向Oracle数据库服务器发布SHUTDOWN ABORT或STARTUP FORCE语句时。\n由于对一些数据库系统中的数据文件执行数据库更新的方式,在任何给定的时间点,数据文件可以包含一些数据块,该数据块(1)已经由未提交的事务暂时地修改和/或(2)还没有反映由提交的事务执行的更新。因此,在数据库服务器失败之后必须执行数据库恢复操作,以将数据库恢复到其恰好在数据库服务器失败之前拥有的事务一致状态。在事务一致状态中,数据库反映由提交的事务作出的所有改变并且不反映由未提交的事务作出的改变。\n典型数据库系统在数据库服务器恢复期间执行多个步骤。首先,数据库系统“前滚(roll forward)”,或重新应用到记录在重做日志中的所有改变的数据文件。前滚对必要的多个重做日志文件进行处理,以及时的将数据库提前,以反映在崩溃时间之前作出的所有改变。前滚通常包括应用联机重做日志文件中的改变,并且还可能包括应用记录在存档的(archived)重做日志文件(在重新使用之前被存档的联机重做文件)中的改变。在前滚之后,数据块含有所有提交的改变以及在崩溃之前被记录在重做日志中的任何未提交的改变。\n退回片断(rollback segment,回滚片断)包括用于撤销在前滚操作之后保持的未提交的改变。在数据库恢复中,在退回片断中含有的信息被用于撤销由在崩溃时未提交的事务作出的改变。撤销由未提交的事务作出的改变的过程称为“退回”事务。\n在此描述的技术不限于其中退回片断被用于撤销事务的环境。例如,在一些数据库环境中,撤销和重做被写入单个顺序日志。在这样的环境中,可以基于单个日志的内容而不是截然不同的重做和撤销日志的内容来执行恢复。\n无共享数据库系统中的失败\n在任何多节点计算机系统中,在一个或多个其他节点保持起作用的同时,一个或多个节点可能失败。在无共享数据库系统中,节点的失败通常使得由失败节点拥有的数据项不可用。在这些数据项能够被再次存取之前,必须对这些数据项执行恢复操作。恢复操作执行的越快,则数据项变得可用就越快。\n在无共享数据库系统中,可以使用无分区或预失败分区来执行恢复操作。当使用无分区时,单个非失败节点假设所有数据项的所有权先前由失败节点拥有。非失败节点然后着手自己执行整个恢复操作。因为非分区方法仅使用一个活动节点的处理能力,因此恢复将花费比恢复操作由许多活动节点共享时更长的时间。这就是当恢复节点需要能够存取失败节点的数据时,在无共享数据库中通常如何完成恢复的。为了简化硬件配置,通常使用“伙伴”系统(buddysystem),其中,节点被分成节点对,每个都能够存取彼此的数据,并且如果发生失败则每个负责彼此恢复。\n根据预失败分区方法,由失败节点拥有的数据在失败之前被分区成不等的无共享数据库片断。在失败之后,不等的片断中的每个均被分配到不同的非失败节点用于恢复。由于恢复操作分布在许多节点中,因此恢复能够比仅由一个节点执行时更快的完成。然而,很少精确地知道节点将在什么时候失败。因此,对于将使用预失败分区方法被恢复的节点而言,通常地涉及划分数据库片断中的节点的CUP和主存储器的分区,通常在任何失败实际发生很久以前就被执行。遗憾的是,在节点被这样的分区的同时,降低了节点的稳态运行时间性能。多种因素导致了这样的性能下降。例如,每个物理节点的资源可能会利用不充分。尽管多个分区由相同的物理节点所拥有,但是分区不能共享用于缓冲池、组合缓存等的存储器。因为有可能更好的利用单个存储器块而不是碎片的存储器块,因此这引起利用不充分。此外,给定的工作负荷的工序间(interprocess)通信随着分区的数量的增加而增加。例如,适用于四个分区的应用程序可能不适用于十二个分区。然而,使用预失败分区方法用于失败之后的并行恢复,可能需要12个分区。\n附图说明\n通过附图中的实例来描述本发明,但是不局限于此,在附图中相同的参考标号表示类似的元件,其中:\n图1是示出根据本发明的实施例的包括两个共享磁盘子系统的群的框图;以及\n图2是可以实施本发明的实施例的计算机系统的框图。\n具体实施方式\n下文中描述了用于提高包括共享磁盘存储系统的无共享数据库系统的性能的各种技术。在下面的描述中,为了解释的目的,描述了多个特定的细节,以对本发明有彻底的了解。然而,很显然,在没有这些特定细节的情况下,也可以实现本发明。在其它的实例中,以框图形式示出已知的结构和设备,以避免不必要地使本发明不清楚。\n功能概述\n下文中描述了用于提高无共享数据库系统的性能的各种技术,其中,运行无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。正如由数据库系统的无共享结构所确定的,在任何给定的时间,每个数据段仍然仅由一个节点拥有。然而,利用运行无共享数据库系统的节点中的至少一些节点能够共享的存取磁盘这一事实,以更有效地重新平衡并恢复无共享数据库系统。\n特别地,提供用于使用并行地操作的多个恢复节点来恢复由失败节点拥有的数据的技术。由失败节点拥有的数据被分配到能够存取该数据所存在的共享磁盘的恢复节点。失败节点拥有的恢复日志有恢复节点读取,或由将恢复任务分配到恢复节点的协调者程序读取。\n包括共享磁盘系统的示例性群(cluster)\n图1是示出可以实施本发明的实施例的群100的框图。群100包括五个节点102、104、106、108、和110,这些节点通过允许节点彼此通信的互连线130连接。群100包括两个磁盘150和152。节点102、104、和106能够存取磁盘150,并且节点108和110能够存取磁盘152。因此,包括节点102、104、和106以及磁盘150的子系统构成第一共享磁盘系统,而包括节点108和110以及磁盘152的子系统构成第二共享磁盘系统。\n群100是包括两个共享磁盘子系统并且共享磁盘子系统之间没有重叠的从属关系(membership)的相对简单系统的实例。实际系统可能比群100复杂的多,有几百个节点、几百个共享磁盘并且节点和共享磁盘之间是多对多关系。在这样的系统中,例如,能够存取许多磁盘的单个节点可以是多个不同的共享磁盘子系统的成员,其中,每个共享磁盘子系统均包括共享磁盘中的一个共享磁盘和能够存取该共享磁盘的所有节点。\n共享磁盘系统上的无共享数据库\n为了说明,将假设无共享数据库系统在群110上运行,其中,由无共享数据库系统管理的数据库存储在磁盘150和152上。基于数据库系统的无共享性质,可以将数据分为五个组或分区112、114、116、118、和120。每个分区都被分配给相应的节点。分配给分区的节点被认为是存在于该分区中的所有数据的唯一所有者。在本实例中,节点102、104、106、108、和110分别拥有分区112、114、116、118、和120。由能够存取磁盘150的节点(节点102、104、和106)所拥有的分区112、114、和118存储在磁盘150上。类似地,由能够存取磁盘152的节点(节点108和110)拥有的分区118和120存储在磁盘152上。\n正如由在群100上运行的数据库系统的无共享性质所规定的,在任何给定的时间,任何数据块至多由一个节点拥有。另外,通过功能传送来协调对共享数据的存取。例如,在支持SQL语言的数据库系统的环境中,不拥有特定数据块的节点可以通过向确实拥有该数据块的节点发送SQL语句的片断来引起对该数据的操作。\n所有权映射\n为了有效地执行功能传送,所有节点都需要知道哪个节点拥有哪个数据。因此,建立所有权映射,其中,所有权映射指出数据到节点的所有权分配。在运行时期间,不同的节点参考所有权映射以在运行时向正确的节点发送SQL片断。\n根据一个实施例,在SQL(或任何其他数据库存取语言)语句的编译时间无需决定数据到节点的映射。相反,正如将在下文中更详细地描述的,数据到节点的映射可以在运行时期间建立并修改。使用下文描述的技术,当所有权从能够存取其上存在数据的磁盘的一个节点改变到能够存取其上存在数据的磁盘的另一节点时,能够在不移动数据在磁盘上的持久位置的情况下执行所有权的改变。\n锁定\n锁是用于在能够存取资源的多个实体中协调对资源的存取的结构。在无共享数据库系统的情况下,无需全局锁定(global locking)来协调对无共享数据库中的用户数据的存取,这是因为任何给定的数据块仅由单个节点拥有。然而,因为无共享数据库的所有节点均要求存取所有权映射,因此可能需要一些锁定来防止对所有权映射的不一致的更新。\n根据一个实施例,当数据块的所有权正在从一个节点(“原所有者”)被再分配到另一节点(“新所有者”)时,使用两节点锁定方案。另外,全局锁定机制可以用于控制对与无共享数据库相关的元数据的存取。这样的元数据可以包括例如所有权映射。\n如果数据的所有权正在被再分配用于并行恢复,则不需要所有权映射的锁定方案。特别地,如果在运行时间期间所有权不改变,则可以使用简单的方案来平行在存活者当中的恢复。例如,如果存在N个存活者,则第一存活者能够负责对由分解为第一个1/N个存储段等的头节点拥有的所有数据进行恢复。在恢复完成之后,由头节点拥有的所有数据的所有权返回到单个节点。\n基于存储段(bucket)的分区\n如上所述,由无共享数据库管理的数据被分区,并且每个分区中的数据由一个节点独占地拥有。根据一个实施例,通过将数据分配给逻辑存储段来建立分区,然后将每个存储段分配给分区。因此,所有权映射中的数据到节点的映射包括数据到存储段的映射和存储段到节点的映射。\n根据一个实施例,数据到存储段的映射通过对每个数据项的名称运用散列函数来建立。类似地,存储段到节点的映射可以通过对与存储段相关的标识符运用另一散列函数来建立。可选的,可以使用基于范围的分区、列表分区、或通过简单地列举每个个体关系来建立该映射中的一个或两个。例如,可以通过将数据项的名字空间划分为五十个范围将一百万个数据项映射到五十个存储段。然后通过为每个存储段存储记录可以将五十个存储段映射到五个节点,该记录用于(1)识别存储段并且(2)识别当前分配有存储段的节点。\n相对于其中为每个数据项存储单独的映射记录的映射而言,存储段的使用显著地减少了所有权映射的大小。另外,在存储段的数量超过节点的数量的实施例中,存储段的使用使得将所有权再分配给由给定的节点拥有的数据的子集相对容易。例如,新节点可以从当前分配有十个存储段的节点被分配单个存储段。这样的再分配将简单地涉及为该存储段修改指示存储段到节点的映射的记录。被再分配的数据的数据到存储段的映射不必被改变。\n如上所述,可以通过使用各种技术(包括但不限于散列分区、范围分区、或列值)中的任何一种来建立数据到存储段的映射。如果使用基于范围的分区并且范围的数量不显著地大于节点的数量,只要用于对数据项分区的范围关键码(range key)是不会改变的值(例如数据),则数据库服务器可以采用更精细的(更狭窄)范围来实现所需数量的存储段。如果范围关键码是可以改变的值,则响应于用于特定数据项的范围关键码值的改变,数据项从其原存储段被去除并被添加到对应于数据项的范围关键码的新值的存储段。\n建立所有权的初始分配\n使用上述的映射技术,可以在多个节点之中共享单个表或索引的所有权。最初,所有权的分配可以是随机的。例如,用户可以选择用于数据到存储段的映射的关键码和分区技术(例如,散列、范围、列表等),以及用于存储段到节点的映射的分区技术,但是不需要指定存储段到节点的初始分配。数据库服务器然后可以基于用于数据到存储段的映射的关键码来确定用于存储段到节点的映射的关键码,并且在不考虑由存储段表示的特定数据和数据库对象的情况下创建初始存储段到节点的分配。\n例如,如果用户选择基于关键码A将对象分区,则数据库服务器将使用关键码A来决定存储段到节点的映射。在一些情况下,数据库服务器可以添加附加关键码或对用于数据到存储段的映射的关键码应用不同的函数(只要其保存数据到存储段的映射)。例如,如果使用关键码A将对象散列分区成四个数据存储段,则数据库服务器可以通过对关键码B应用散列函数以确定存储段到节点的映射,或通过简单地将散列值的数目增加到12,将这四个存储段中的每个细分成三个存储段(以允许存储段到节点的灵活分配)。如果散列是模数函数(modulo function),则第0个、第4个、和第8个存储段到节点的存储段将对应于第0个数据到存储段的存储段,第1个、第5个、和第9个存储段到节点的存储段将对应于第1个数据到存储段的存储段等。\n另一个实施例是,如果该对象根据DATE类型的关键码A被范围分区,则可以通过使用返回年度的年度(日期)函数来指定数据到存储段的映射。但是存储段到节点的映射可以由数据库服务器通过使用月份和年度(日期)而在内部计算。每个年度分区被分成12个存储段到节点的存储段。如果数据库服务器确定特定年度的数据被经常地(通常是本年度)存取,则该方法可以在其他节点之中再分配这12个存储段。\n在上面给出的两个实例中,给出存储段到节点的存储段#,则数据库服务器能够唯一地确定数据到存储段的存储段#。同样在这些实例中,用户选择用于数据到存储段的映射的关键码和分区技术。然而,在可选实施例中,用户可以不选择用于数据到存储段的映射的关键码和分区技术。相反,用于数据到存储段的映射的关键码和分区技术也可以由数据库服务器自动地决定。\n根据一个实施例,数据库服务器基于应当向每个节点分配多少存储段来进行初始的存储段到节点的分配。例如,具有较大容量的节点可以被分配有更多的存储段。然而,在初始分配中,哪个特定存储段应当被分配给哪个节点的决定是随机的。\n在可选实施例中,当进行存储段到节点的分配时,数据库服务器的确考虑哪个数据由存储段表示。例如,假设用于特定表的数据在若干存储段中被划分。数据库服务器可以有意识的将所有这些存储段分配到相同的节点,或有意识的在许多节点之中分配这些存储段的所有权。类似地,在初始分配中,数据库服务器可能试图将与表相关的存储段分配给同与用于这些表的索引相关的存储段相同的节点。相反地,数据库服务器可能试图将与表相关的存储段分配给不同于与用于这些表的索引相关的存储段被分配到的节点的节点。\n由跨越存活节点的一个或多个节点拥有的共享数据的并行恢复\n分布式无共享数据库系统的一个或多个节点可能失败。为了确保由无共享数据库系统管理的数据的可用性,由已经失败节点(“死亡节点(dead node)”)拥有的存储段必须被再分配到还没有失败节点。典型地,存储段到节点的映射信息将被存储在位于共享磁盘上的数据库目录中。通过检查数据库目录,无共享数据库系统的非失败节点能够确定由死亡节点拥有的分区存储段的列表。\n一旦由死亡节点拥有的分区存储段已经被识别,则分区存储段在存活节点之中被再分配。值得注意的是,只要被分配有存储段的所有权的存活节点能够存取含有映射到存储段的数据的共享磁盘,则能够在不移动底层数据的情况下进行该再分配。例如,假设群100的节点102失败。如果节点102拥有对应于分区112的存储段,则该存储段能够在不改变数据在磁盘150上的物理位置的情况下被再分配给节点104或节点106。\n在先前由头节点拥有的存储段的所有权的再分配之后,通过存活节点对这些存储段中的项执行前滚和退回操作。根据一个实施例,失败节点的存储段被分配到的存活节点仅包括能够存取失败节点的重做日志以及由失败节点拥有的数据的那些存活节点。可选的,如果执行恢复的存活节点能够存取失败节点的数据但是不能够存取失败节点的重做日志,则协调者可以扫描重做日志并且基于重做被生成用于的存储段来分配其中包含的重做记录。\n根据一个实施例,正在进行恢复的节点以特定顺序将正在被恢复的块写入磁盘以避免问题。特别地,如果需要执行大量的恢复(例如,在介质恢复期间),则恢复节点采用检查点或将恢复的块写入磁盘。然而,当在这些情况下将块写入磁盘时,恢复节点可能不能以任何顺序执行写入。例如,如果为块A生成的重做在为块B生成的重做之前,并且块A和B正在由两个分离的节点恢复,则块B不能在块A之前被写入,特别是如果这意味着失败节点的重做线程的检查点可以是提前的,超过块B的重做。为了避免这个问题,恢复节点可以彼此的交换最早的脏恢复块(从失败节点应用重作用于的块)。如果节点的块是最早的脏恢复块,则节点可以将其块写入。这样块将被按次序写入。\n由于若干节点参与恢复操作,因此恢复操作比上述的无分区方法更快的被执行。此外,不同于上述的预失败分区方法,存储段的所有权的再分配在失败之后进行,使得不会招致运行时间损失。\n在此描述的用于将恢复操作分配到多个节点用于并行恢复操作的技术,同样应用于由单个节点拥有的对象的并行介质恢复。特别地,当包含对象的介质失败时,对象的部分的所有权在恢复期间可以被分配到多个节点。在恢复已经完成之后,所有权可以被收缩回(collapsed back)到单个节点。\n根据用于处理嵌套的失败的一个实施例,数据库系统留意是否已经对块应用了撤销块。追踪撤销的应用是有用的,因为修改了不同分区的事务的较早部分可能已经被退回,而随后改变可能还没有被退回。\n根据一个实施例,分区存储段号被存储在重做记录中。例如,如果重做记录指示对属于特定存储段的块作出改变,则该存储段的存储段号被存储在重做记录中。因此,当应用重做记录时,恢复处理能够自动地跳过指示不要求恢复的存储段的分区存储段号的那些重做记录。\n当应用重做时,所有的恢复节点能够扫描失败节点的重做日志,或者单个恢复协调器能够扫描该日志并且将重做块分配到参与该恢复的节点。在恢复协调器分配重做块的实施例中,重做基于分区存储段号被分配。因此,被分配以恢复特定存储段的恢复节点将从恢复协调器接收用于属于该存储段的所有数据项的重做。\n在恢复操作期间,特定数据块将可能从一个分区移动到另一个分区。根据一个实施例,将对象从一个分区移动到另一个分区的操作被作为跟随有插入的删除。因此在属于不同存储段的重做块之间不存在排序相关性。\n选择性并行化\n根据一个实施例,只有恢复操作的选择的部分是并行地。例如,特定节点可以被分配作为恢复协调器。在恢复期间,恢复协调器连续地恢复请求恢复的所有数据,直到恢复协调器遇到满足并行化标准的恢复任务。例如,并性化标准可以规定并行恢复应当被用于超过于特定大小阈值的对象。因此,当恢复协调器在恢复处理期间遇到这样的对象时,数据库服务器再分配对应于较大对象的存储段的所有权,使得若干节点能够参与该对象的并行恢复。当完成该规定的任务时,该数据的所有权可以被再分配回恢复协调器。\n在传输中的存储段\n当存储段的所有权正被从一个节点(“原所有者”)转移到另一个节点(“新所有者”)时,存储段被认为“在传输中”。如果当存储段在传输中时原所有者和/或新所有者失败,则额外的恢复步骤可能是必要的。所需要的额外的恢复步骤是由数据库系统使用的所有权转移技术规定的。如果所有权转移技术允许原所有者和新所有者均具有属于传输中的存储段的数据项的脏版本,则恢复可能涉及(1)使用存在于存活节点中的数据项的缓存的脏版本,以及(2)合并并且应用原所有者和新所有者的重做日志。类似地,如果分区存储段在失败时在传输中时,由多个节点生成的撤销日志可能需要被应用于退回属于该存储段的数据项。\n确定哪个存储段需要恢复\n当节点失败时,可以检查存储段到节点的映射以确定哪个存储段数据属于失败节点,并且因此需要恢复。根据一个实施例,对存储段到节点的映射进行第一遍扫描(first pass)以确定哪个存储段需要恢复。在第一遍扫描之后,不需要恢复的所有存储段立即可用于存取。然后进行第二遍扫描,在第二遍扫描期间,对需要恢复的存储段执行恢复操作。在第二遍扫描期间执行的恢复,可以由被指定作为由死亡节点拥有的所有数据的所有者的单个节点完成,或可以使用所有权映射在存活节点之中被再分配。\n硬件综述\n图2是示出可以执行本发明的实施例的计算机系统200的框图。计算机系统200包括用于传递信息的总线202或其它通信装置以及用于处理信息的与总线202连接的处理器204。计算机系统200还包括连接至总线202的主存储器206,诸如随机访问存储器(RAM)或者其它动态存储装置,用于储存信息和将由处理器204执行的指令。在执行将由处理器204执行的指令期间,主存储器206还可用于储存临时变量或其他中间信息。计算机系统200进一步包括只读存储器(ROM)208或连接至总线202的其他静态存储装置,用于存储静态信息和处理器204的指令。提供诸如磁盘或光盘的存储设备210,并连接至总线202用于存储信息和指令。\n计算机系统200可以经由总线202连接至诸如阴极射线管(CRT)的显示器212,用于向计算机用户显示信息。包括字母数字键和其他键的输入装置214连接至总线202,用于将信息和指令选择传递到处理器204。另一种类型的用户输入装置是光标控制216,诸如鼠标、跟踪球、或光标方向键,用于将方向信息和命令选择传递到处理器204并用于控制显示器212上的光标移动。输入装置通常在两个轴上(第一个轴(例如X轴)和第二个轴(例如Y轴))具有两个自由度,使装置能指定平面上的位置。\n本发明涉及计算机系统200的使用,用于执行在此描述的技术。根据本发明的一个实施例,通过计算机系统200响应于执行包括在主存储器206中的一个或多个指令的一个或多个序列的处理器204,来实现这些技术。这样的指令可以从诸如存储装置210的其它计算机可读介质读入主存储器206。包括在主存储器206中的指令序列的执行,使得处理器204执行此处所述的处理步骤。在可选实施例中,可以使用硬连线电路(hard-wired circuitry)来取代软件指令或者与软件指令结合来实施该发明。因此,本发明的实施例将不限于硬件电路和软件的任何特定组合。\n这里使用的术语“计算机可读介质”是指参与向处理器204提供指令用于执行的任何介质。这种介质可以采取多种形式,包括但不限于非易失性介质、易失性介质、和传递介质。非易失性介质举例来说包括光盘或磁盘,诸如存储装置210。易失性介质包括动态存储器,诸如主存储器206。传输介质包括同轴电缆、铜线、和光纤,包括组成总线202的导线。传输介质还可采取声波或光波形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。\n通常形式的计算机可读介质包括如软盘、软性盘、硬盘、磁带,或者任何其它磁性介质、CD-ROM、任何其它光介质、打孔纸、纸带、或者任何带孔图样的物理介质、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者盒式磁带,或者以下提到的载波、或者计算机可读的任何其他介质。\n各种形式的计算机可读介质可参与将一个或者多个指令的一个或多个序列承载到处理器204用于执行。例如,指令开始可承载在远程计算机的磁盘中。远程计算机可以将指令加载到其动态存储器中,然后使用调制解调器通过电话线发送指令。计算机系统200本地的调制解调器可接收电话线上的数据,并使用红外发射器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,并且合适的电路可以将数据放到总线202上。总线202将数据承载到主存储器206,处理器204从主存储器取回并执行这些指令。在由处理器204执行这些指令之前或之后,由主存储器206接收的指令可随意地储存在存储装置210上。\n计算机系统200还包括连接至总线202的通信接口218。提供双向数据通信的通信接口218,连接到与局域网222连接的网络链路220。例如,通信接口218可以是综合业务数字网(ISDN)卡或者调制解调器,用于提供到相应类型的电话线的数据通信连接。又如,通信接口218可以是局域网(LAN)卡,用于提供至兼容局域网(LAN)的数据通信连接。也可以使用无线链路。在任何这样的实施中,通信接口218发送和接收承载表示各种类型的信息的数字数据流的电信号、电磁信号、和光学信号。\n网络链路220通常可通过一个或者多个网络向其它数据装置提供数据通信。例如,网络链路220可通过局域网222与主机224连接,或者与互联网服务提供商(ISP)226操作的数据设备连接。ISP226又通过目前通称为“互联网”228的全球分组数据通信网络提供数据通信服务。局域网222和互联网228都使用承载数字数据流的电信号、电磁信号、或光学信号。通过各种网络的信号和网络链路220上的信号以及通过通信接口218的信号,都传送数字数据给计算机系统200或者传送来自计算机系统的数字数据,是传输信息的载波的示例性形式。\n计算机系统200能通过网络、网络链路220、和通信接口218发送消息和接收数据(包括程序代码)。在互联网的实例中,服务器230可通过互联网228、ISP 226、局域网222、和通信接口218,传送用于应用程序的所请求的程序代码。\n所接收的代码可以在其被接收时由处理器204执行,和/或储存在存储装置210或者其它非易失性介质中用于随后执行。按照这种方式,计算机系统200可以以载波的形式获得应用代码。\n以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2010-06-23
- 2007-01-10
发明专利申请公布说明书更正
发明专利申请公布说明书更正更正卷=22号=36页码=扉页更正项目=优先权误=缺少优先权第二条正=2004.04.23 US 10/831,413
- 2006-10-25
- 2006-09-06
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
1997-03-19
|
1996-06-04
| | |
2
| | 暂无 |
2001-06-28
| | |
3
| |
1997-09-10
|
1996-06-06
| | |
4
| |
2003-05-14
|
2001-02-05
| | |
5
| | 暂无 |
1997-05-29
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |