无共享数据库系统中的所有权再分配的制作方法

文档序号:6489533阅读:259来源:国知局
专利名称:无共享数据库系统中的所有权再分配的制作方法
技术领域
本发明涉及用于管理在共享磁盘硬件上运行的无共享(shared-nothing)数据库系统中的数据的技术。
背景技术
多处理计算机系统一般分为三类一切资源共享(shared-everything)系统、共享磁盘系统、以及无共享系统。在一切资源共享系统中,所有处理器上的程序能够直接存取系统中的所有易失存储装置(下文中一般称为“存储器”)以及所有非易失存储装置(下文中一般称为“磁盘”)。因此,要求不同的计算机组件之间的高级布线,以提供一切资源共享的功能。另外,就一切资源共享结构而言还存在可伸缩性限制。
在共享磁盘系统中,处理器和存储器被分组成节点。共享磁盘系统中的每个节点本身可以构成包括多处理器和多存储器的一切资源共享系统。所有处理器上的程序能够存取系统中的所有磁盘,但是只有属于特定节点的处理器上的程序能够直接存取在特定节点内的存储器。共享磁盘系统一般地要求比一切资源共享系统少的布线。因为所有节点能够存取所有数据,所以共享磁盘系统还能够容易地适应不平衡的工作负荷条件。然而,共享磁盘系统易受相关系统开销(coherence overhead)的影响。例如,如果第一节点已经修改了数据并且第二节点想要读取或者修改该相同的数据,则必须采取多个步骤以确保将数据的正确版本提供给第二节点。
在无共享系统中,所有的处理器、存储器、和磁盘被分组成节点。如同在共享磁盘系统中一样,在无共享系统中,每个节点本身可以构成一切资源共享系统或共享磁盘系统。只有在特定节点上运行的程序才能够直接存取特定节点内的存储器和磁盘。三种一般类型的多处理系统的无共享系统通常要求各种系统组件之间的最少量的布线。然而,无共享系统最易受不平衡的工作负荷条件的影响。例如,在特定任务期间待被存取的所有数据可能都存在于特定节点的磁盘上。因此,只有在该节点内运行的程序可以用于执行工作颗粒(work granule),即使其他节点上的程序都保持空闲状态。
在多节点系统上运行的数据库一般分为两类共享磁盘数据库和无共享数据库。
共享磁盘数据库共享磁盘数据库基于以下的假设来协调工作假设由数据库系统管理的所有数据对于数据库系统可用的所有处理节点而言都可见。因此,在共享磁盘数据库中,服务器可以向任何节点上的程序分配任何工作,而与包含在工作期间将被存取的数据的磁盘的位置无关。
因为所有节点都能够存取相同的数据,并且每个节点都具有其自己的专用缓存,因此相同数据项的多个版本可以存在于任意数量的多个节点的缓存中。遗憾的是,这意味着当一个节点要求特定数据项的特定版本时,该节点必须与其他节点相协调以使数据项的特定版本被传送至请求节点。因而,共享磁盘数据库被认为以“数据传送”的原理运行,其中,数据必须被传送到已经被指定处理该数据的节点。
这样的数据传送要求可能导致“查验(ping)”。特别地,当由一个节点所需的数据项的拷贝存在于另一节点的缓存中时,就会出现查验。查验可能要求将数据项写入磁盘,然后从磁盘读取。查验所必需的磁盘操作的性能能够显著地降低数据库系统的性能。
共享磁盘数据库既可以在无共享计算机系统上运行,也可以在共享磁盘计算机系统上运行。为了在无共享计算机系统上运行共享磁盘数据库,可以将软件支持程序(software suppot)添加到操作系统或者可以提供其它硬件以允许程序能够存取远程磁盘。
无共享数据库无共享数据库假设程序只能在数据被包含在与程序属于相同节点的磁盘上时存取该数据。因此,如果特定节点想要对由另一节点所拥有的数据项执行操作,则特定节点必须向另一节点发送请求,请求另一节点执行该操作。因而,无共享数据库被认为执行“功能传送”,而不是在节点之间传送数据。
因为任何给定的数据块都仅由一个节点拥有,因此只有这一个节点(数据的“所有者”)将永久在其缓存中具有数据的拷贝。因此,无需在共享磁盘数据库系统中所要求的缓存相关性机制类型。另外,由于不要求拥有数据项的节点将数据项的缓存版本保存到磁盘以使另一节点然后能够将该数据项存入其缓存,因此无共享系统不遭受与查验相关的性能损失。
无共享数据库可以在共享磁盘多处理系统和无共享多处理系统上运行。为了在共享磁盘机器上运行无共享数据库,可以提供一种机制用于对数据库进行分区(partitioning),并且将每个分区的所有权分配给特定节点。
只有有所有权的节点可以对数据块进行操作的事实意味着无共享数据库中的工作负荷可能变得极度不平衡。例如,在十个节点的系统中,所有工作要求的90%可能涉及由节点中的一个所拥有的数据。因此,该一个节点工作过度,而其他节点的计算资源未被充分使用。为了“重新平衡”工作负荷,可以使无共享数据库脱机,并且数据(及其所有权)可以在节点之间被再分配。然而,该过程涉及潜在地移动大量数据,并且可能仅仅临时的解决工作负荷的失衡。


通过附图中的实例来描述本发明,但是不局限于此,在附图中相同的参考标号表示类似的元件,其中图1是示出根据本发明的实施例的包括两个共享磁盘子系统的群的框图;以及图2是可以实施本发明的实施例的计算机系统的框图。
具体实施例方式
下文中描述了用于提高包括共享磁盘存储系统的无共享数据库系统的性能的各种技术。在下面的描述中,为了解释的目的,描述了多个特定的细节,以对本发明有彻底的了解。然而,很显然,在没有这些特定细节的情况下,也可以实现本发明。在其它的实例中,以框图形式示出已知的结构和设备,以避免不必要地使本发明不清楚。
功能概述下文中描述了用于提高无共享数据库系统的性能的各种技术,其中,运行无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。正如由数据库系统的无共享结构所确定的,在任何给定的时间,每个数据块仍然仅由一个节点拥有。然而,利用运行无共享数据库系统的节点中的至少一些节点能够共享的存取磁盘这一事实,以更有效地重新平衡并恢复无共享数据库系统。
特别地,提供用于在不改变数据的在存储器上的位置的情况下来改变无共享数据库中的数据的所有权的技术。由于数据的持久存储位置在数据所有权的转移期间没有被改变,因此可以更加自由地转移所有权,并且具有比数据的物理重新布置将引起的更小的性能损失。
还描述了用于提供所有权的快速运行时(run-time)再分配的各种技术。由于能够在运行时期间执行再分配,因此不必使无共享系统脱机以执行再分配。另外,这些技术描述了如何以相对地精细粒度(fine granularity)来执行再分配,避免仅仅为了再分配节点中的一个节点上的少数数据项的所有权而需要执行经过所有节点的大量数据的大量再分配。
包括共享磁盘系统的示例性群(cluster)图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的子系统构成第二共享磁盘系统。
群100是包括两个共享磁盘子系统并且共享磁盘子系统之间没有重叠的从属关系(membership)的相对简单系统的实例。实际系统可能比群100复杂的多,有几百个节点、几百个共享磁盘并且节点和共享磁盘之间是多对多关系。在这样的系统中,例如,能够存取许多磁盘的单个节点可以是多个不同的共享磁盘子系统的成员,其中,每个共享磁盘子系统均包括共享磁盘中的一个共享磁盘和能够存取该共享磁盘的所有节点。
共享磁盘系统上的无共享数据库为了说明,将假设无共享数据库系统在群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上。
正如由在群100上运行的数据库系统的无共享性质所规定的,在任何给定的时间,任何数据块至多由一个节点拥有。另外,通过功能传送来协调对共享数据的存取。例如,在支持SQL语言的数据库系统的环境中,不拥有特定数据块的节点可以通过向确实拥有该数据块的节点发送SQL语句的片断来引起对该数据的操作。
所有权映射为了有效地执行功能传送,所有节点都需要知道哪个节点拥有哪个数据。因此,建立所有权映射,其中,所有权映射指出数据到节点的所有权分配。在运行时期间,不同的节点参考所有权映射以在运行时向正确的节点发送SQL片断。
根据一个实施例,在SQL(或任何其他数据库存取语言)语句的编译时间无需决定数据到节点的映射。相反,正如将在下文中更详细地描述的,数据到节点的映射可以在运行时期间建立并修改。使用下文描述的技术,当所有权从能够存取其上存在数据的磁盘的一个节点改变到能够存取其上存在数据的磁盘的另一节点时,能够在不移动数据在磁盘上的持久位置的情况下执行所有权的改变。
锁定锁是用于在能够存取资源的多个实体中协调对资源的存取的结构。在无共享数据库系统的情况下,无需全局锁定(global locking)来协调对无共享数据库中的用户数据的存取,这是因为任何给定的数据块仅由单个节点拥有。然而,因为无共享数据库的所有节点均要求存取所有权映射,因此可能需要一些锁定来防止对所有权映射的不一致的更新。
根据一个实施例,当数据块的所有权正在从一个节点(“原所有者”)被再分配到另一节点(“新所有者”)时,使用两节点锁定方案。另外,全局锁定机制可以用于控制对与无共享数据库相关的元数据的存取。这样的元数据可以包括例如所有权映射。
在不移动数据的情况下转移所有权根据本发明的一个方面,可以在不移动数据的情况下将数据的所有权从一个节点(原所有者)改变到与该数据有联系的另一个节点(新所有者)。例如,假设特定数据项当前存在于分区112中。由于数据项存在于分区112中,因此数据项由节点102拥有。为了将数据的所有权改变至节点104,数据必须不再属于分区112,而是改为属于分区114。在无共享数据库系统的传统执行中,这种所有权改变一般地会使得数据项实际地从对应于分区112的磁盘150上的一个物理位置被移动到对应于分区114的磁盘150上的另一个物理位置。
相反地,根据本发明的实施例,分区112和114不是必然是磁盘150的特定位置的物理分区。相反,分区112和114是不依赖于位置的分区,其仅仅分别表示当前由节点102和104拥有的数据项的集合,而与特定数据项存在于磁盘152上的位置无关。因而,由于分区112和114不依赖于位置,因此能够在不经磁盘150上的数据的任何实际移动的情况下,将数据项从一个分区移动至另一个分区(即从一个所有者分配到另一个所有者)。
虽然改变数据项的所有权不要求数据项的移动,但是其要求所有权映射的改变。不同于无共享数据库中的用户数据,所有权映射在不同的节点中共享。因此,所有权映射的部分可以缓存于不同的节点的专用缓存中。因而,响应于数据项的所有权的改变,所有权映射被改变,并且所有权映射的受影响部分的缓存拷贝失效。
根据可选实施例,与基础对象的方案改变类似地执行所有权改变。特别地,在对所有权映射做出改变之后,涉及所有权映射的编译语句失效并且被重新编译以使用新的所有权映射。
节点的添加和去除在群100的操作期间,可能需要从群100添加或去除节点。在传统的无共享系统中,这样的操作会涉及频繁地从文件或磁盘的一个物理分区中将大量数据移动至另一个文件或磁盘的另一个物理分区。通过使用不依赖于位置的分区,必须被物理地重新布置的唯一数据,是那些其所有权被转移至不能存取该数据当前存在的磁盘的节点的数据。
例如,假设新节点X被添加至群100,并且节点X能够存取磁盘152但不能存取磁盘150。为了重新平衡节点之间的工作负荷,当前由节点102至110拥有的一些数据可以被再分配给节点X。由于其原所有者是节点102至106的数据存在于节点X不能存取的磁盘150上,因此该数据必须被物理地移动至节点X能够存取的磁盘152。然而,由于其原所有者是节点108和110的数据已经存在于节点X能够存取的磁盘152上,因此可以在不移动实际数据的情况下通过更新所有权映射将该数据的所有权转移至节点X。
类似地,当节点从群100被去除时,只有以下数据项需要被物理地重新布置该数据项被转移到当前不能存取其上存在数据项的磁盘的节点。其所有权被转移到能够存取其上存在该数据的磁盘的节点的数据项无需被移动。例如,如果节点102从群100被去除,并且之前由节点102所拥有的所有数据项的所有权均被转移至节点104,则没有数据项响应于所有权的改变而需要被物理地重新布置。
所有权的逐渐转移根据一个实施例,通过逐渐地而不是突然地执行所有权转移,可以减轻与响应于添加或去除的节点的数据所有权的大量再分配相关的性能损失。例如,当向群添加新节点时,系统可以开始向新节点转移少量数据项的所有权或不转移数据项的所有权,而不是转移足够多的数据的所有权以使新节点与现存的节点一样繁忙。根据一个实施例,基于工作负荷的需要逐渐地转移所有权。例如,数据所有权的转移可以在系统检测到节点中的一个节点的工作负荷变得过度时被触发。响应于检测到节点工作过度,属于该工作过度节点的一些数据项可以被分配给先前添加的节点。逐渐地,越来越多的数据项可以从工作过度的节点被分配到新节点,直到检测到该工作过度的节点不再工作过度为止。
另一方面,所有权的再分配可以在现存节点的工作负荷降至低于某一阈值时被触发。特别地,理想的是,当繁忙节点的工作负荷减轻时将一些所有权责任从其他繁忙节点转移至新节点,以避免再分配操作降低已经工作过度的节点的性能。
至于从去除的节点逐渐转移所有权,所有权转移可能,例如,在必要时被触发。例如,如果数据项X由去除的节点拥有,则当检测到一些节点已经请求涉及数据项X的操作时,数据项X可以被再分配给另一节点。类似地,将所有权从去除的节点转移至现存节点可能在现存节点的工作负荷降至低于某一阈值时被触发。
基于存储段(bucket)的分区如上所述,由无共享数据库管理的数据被分区,并且每个分区中的数据由一个节点独占地拥有。根据一个实施例,通过将数据分配给逻辑存储段来建立分区,然后将每个存储段分配给分区。因此,所有权映射中的数据到节点的映射包括数据到存储段的映射和存储段到节点的映射。
根据一个实施例,数据到存储段的映射通过对每个数据项的名称运用散列函数来建立。类似地,存储段到节点的映射可以通过对与存储段相关的标识符运用另一散列函数来建立。可选地,该两个映射或其中之一可以使用基于范围的分区来建立,或通过简单地列举每个个体关系来建立。例如,可以通过将数据项的名字空间划分为五十个范围将一百万个数据项映射到五十个存储段。然后通过为每个存储段存储记录可以将五十个存储段映射到五个节点,该记录用于(1)识别存储段并且(2)识别当前分配有存储段的节点。
相对于其中为每个数据项存储单独的映射记录的映射而言,存储段的使用显著地减少了所有权映射的大小。另外,在存储段的数量超过节点的数量的实施例中,存储段的使用使得将所有权再分配给由给定的节点拥有的数据的子集相对容易。例如,新节点可以从当前分配有十个存储段的节点被分配单个存储段。这样的再分配将简单地涉及为该存储段修改指示存储段到节点的映射的记录。被再分配的数据的数据到存储段的映射不必被改变。
如上所述,可以通过使用各种技术(包括但不限于散列分区、范围分区、或列值)中的任何一种来建立数据到存储段的映射。如果使用基于范围的分区并且范围的数量不显著地大于节点的数量,只要用于对数据项分区的范围关键码(range key)是不会改变的值(例如数据),则数据库服务器可以采用更精细的(更狭窄)范围来实现所需数量的存储段。如果范围关键码是可以改变的值,则响应于用于特定数据项的范围关键码值的改变,数据项从其原存储段被去除并被添加到对应于数据项的范围关键码的新值的存储段。
基于树的分区将由数据库系统管理的数据项分区为子集的另一种方法是使用分级存储结构(例如,BTree),以使树形结构的上级(例如,根)由所有节点所拥有,并且下级(例如,叶节点)在节点之中被分区。根据一个实施例,树形结构包括多个子树,其中,每个子树被分配到特定节点。另外,每个下级树节点对应于一组数据。与下级树节点相关的一组数据由与包括树节点的子树相关的节点所拥有。
在这样的实施例中,当子树的所有权发生变化时,通过锁定/广播方案使上级无效。下级的指针被修改以移动不同节点下的子树的所有权。
在再分配期间处理脏版本(dirty version)如上所述,当数据的新所有者能够存取其上存在数据的磁盘时,通过在没有物理上移动磁盘上的数据的物理位置的情况下将存储段再分配给节点,来改变数据的所有权。然而,可能原所有者在其易失性存储器中具有一个或多个再分配的数据项的“脏”版本。数据项的脏版本是包括没有影响当前存在于磁盘上的版本的改变的版本。
根据一个实施例,数据项的脏版本被写入共享磁盘作为所有权转移操作的一部分。因此,当新所有者从磁盘读取其新近已经获得所有权的数据项时,由新所有者读取的项的版本将反映由前一所有者做出的最新改变。
可选地,为了避免与将数据项的脏版本写入磁盘相关的开销,如果强制重做并且不重写,则在将脏数据项写入共享磁盘之前,可以从原所有者的易失存储器清除数据项的脏版本。特别地,当所有权节点对数据项作出改变时,生成反映该改变的“重做”记录。只要用于改变的重做记录在数据项的所有权改变之时或之前被强加到磁盘,则原所有者能够在不首先将脏版本保存到磁盘的情况下清除数据项的脏版本。在这种情况下,新所有者能够通过(1)读取重做记录来确定必须对数据项的磁盘版本做出何种改变以及(2)对数据项的磁盘版本做出所指示的改变,来重构数据项的最新版本。
另一可选情况是,在事务请求新所有者节点中的数据时,将脏数据项自动地(原所有者主动地)或在要求时(响应于新所有者的请求)转移至新所有者的缓存。
如果在所有权改变之前数据项的脏版本没有被转储(flush)到磁盘,则数据项的改变可以被反映在多个恢复日志中。例如,假设第一节点对数据项做出改变,之后数据项的所有权被转移至第二节点。第一节点可以将重做日志转储到磁盘,但是将数据项的脏版本直接转移至第二节点而不首先将其存储至磁盘。第二节点之后可以对数据项做出第二改变。假设第二节点将第二改变的重做记录转储到磁盘,然后第二节点在将数据项的脏版本存储到磁盘之前失效。在这些情况下,必须再次被应用于数据项的磁盘版本的改变既反映在第一节点的重做日志中,也反映在第二节点的重做日志中。根据一个实施例,通过合并重做日志来执行联机恢复以恢复数据项。
根据一个实施例,可以在不等待正在修改数据项的事务提交的情况下,转移数据项的所有权。因此,由单个事务对数据项做出的改变可以扩展至多个重做日志。在这些情况下,数据库服务器的事务退回机制被设置为撤销多个日志的改变,其中,以与对数据块做出改变的顺序相反的顺序对数据块执行撤销操作。另外,提供了可以合并所有所有者的重做日志的介质恢复机制,其中,合并程序包括自数据被备份时起做出的所有改变的重做记录。
无阻塞更新(blocking update)的再分配根据本发明的一个方面,在不经对正被再分配的数据进行阻塞更新的情况下,执行数据项所有权的再分配。根据一个实施例,通过使数据库服务器等待用于存取属于再分配的存储段的任何数据项的所有事务提交,并等待属于该存储段的所有脏数据项被转储到磁盘,可以在无阻塞更新的情况下执行所有权的分配。在这些情况下,如果原所有者不能够以独占模式或共享模式存取数据,则属于再分配的存储段的数据能够立即被更新(不等待脏版本被转储到磁盘)。如果原所有者确实能够以独占模式存取数据,则原所有者可以在其缓存中具有数据的脏版本,因此更新被延迟,直到原所有者将脏页(或用于相关改变的重做)写入共享磁盘。
在允许对其所有权已经被新近转移的数据项进行新的更新之前,数据库服务器可以被设置为等待原所有者的已经被请求的进行中的更新完成。另一方面,数据库服务器可以被设置为中止进行中的操作,然后将事务重新发布给所有者。根据一个实施例,基于各种因素做出对于是否等待给定的进行中的操作完成的决定。这样的因素可以包括,例如,已经为该操作完成了多少工作。
在某些情况下,等待原所有者的已经被请求的更新完成,可能会引起假死锁。例如,假设行A在存储段1中,并且行B和C在存储段2中。假设事务T1更新行A,并且另一事务T2已经更新行B。假设在此时,存储段2的所有权被重新映射到新节点。如果此时T1想要更新行C,则T1将等待重新映射完成。因此,T1将等待T2。如果T2想要更新行A,则T1和T2之间存在死锁。
根据一个实施例,即使当要求几个存储段的所有权时,一次只对一个存储段执行所有权的转移,以最小化事务将必须等待以存取再分配的存储段中的数据的时间量。
用于转移所有权的技术根据本发明的多个实施例,以下的实例说明了用于在共享磁盘系统上执行的无共享数据库内转移数据的所有权的技术。在以下的实例中,假设在已经修改数据的事务仍在进行时改变数据的所有权。即,数据库系统不会等待已经存取待被再分配的数据的进行中的事务停顿。
下面将参考其中假设对象(“存储段B”)的子集的所有权从节点X改变至节点Y的实例,来描述一种用于转移所有权的技术。根据一个实施例,数据库系统开始将存储段B标记为正在从节点X到节点Y的“转变中”。所有权映射的改变然后被广播至所有节点,或通过全局锁定失效。
根据一个实施例,响应于所有权映射的改变,重新生成涉及存储段B中的数据的查询执行计划。可选地,响应于所有权映射的改变,缓存的映射被无效或被重新加载。
在再分配之后,存取存储段B中的数据的任何新子查询/数据操纵语言(dml)片断将被传送至节点Y。可选地,在存储段被标为在从X到Y的转变中之前,当前在X中运行的SQL片断可以被退回。在再分配之后,这些片断然后可以被重新发布至节点Y。应当注意,这些片断所属的事务并不是本身被退回,而仅仅是当前调用被退回并且重新发送给新所有者。特别地,在先前的调用中由节点X对存储段B中的数据做出的改变不受影响。
根据一个实施例,节点X能够通过简单的局部锁定方案来检测到没有正在存取存储段B中的数据的进行中的调用。该锁定方案可以涉及,例如,使得存取存储段中的数据的每个程序都获得该存储段上的共享锁/锁存器。当该存储段将被再分配时,执行该再分配的程序等待直至其能够获得存储段上的独占的锁/锁存器。通过获得存储段上的独占的锁/锁存器,再分配程序确保当前没有其他程序正在存取存储段。
根据一个实施例,因为潜在的死锁,在将存储段标记为在转变中之前,节点X不等待所有调用成功地完成。以下是这样的死锁如何发生的实例。考虑将被重新映射的存储段中的行1、2、和3三行。
下列事件序列能够导致死锁(a)T1更新行2。
(b)T2对后边跟着行2的行1执行多行更新。
T2现在等待T1。
(c)决定存储段将被重新映射。
(d)T1想要更新行3。T1现在等待T2。
根据一个实施例,通过只要进行中的调用所存取的存储段B中的数据在缓存中则允许进行中的调用继续正常地执行,来避免在节点X的进行中的调用的强制中止。换句话说,在没有内部节点(inter-node)锁定的情况下,X不能从存储段B的磁盘中读取块。如果有缓存缺失并且存储段在转变中,则X必须发送信息给Y,或者从Y检索该块,或从磁盘读取该块。当存储段在转变中时,在X和Y之间使用缓存相关性协议。
处理新所有者的请求在存储段B已经被再分配给节点Y之后,需要存取存储段B中的数据的任何新SQL片断在节点Y中开始执行。在从磁盘读取新近转移的数据项时由节点Y使用的技术,可以基于在存储段被标记为在转移中之前前所有者节点X做了什么而改变。以下情况是说明可能由新所有者节点Y处理的不同情况的实例。
情况A假设节点X中止所有进行中的调用,并将映射到该存储段的所有脏块写入共享磁盘。为了效率,每个节点能够将脏数据项链接至每个存储段对象序列。在这些情况下,节点Y能够直接从磁盘读取。不需要任何缓存相关性。节点Y立即被标记为该存储段的新所有者。
情况B假设节点X中止所有进行中的调用,但是脏数据项没有被写出。在这些情形下,节点Y将需要在从磁盘读取块之前检索或核实节点X没有脏拷贝。如果X具有脏拷贝,则前映象被留在在节点X中,用于恢复以及确保校验点没有预先通过(advance past)在节点X中做出的改变,该改变还没有通过在节点Y中块记录(block write)被反映到磁盘中。在X中的所有脏数据项已经被写入(既可自己写入也可由通过Y中的记录清除的前映象(PI)写入)之后,存储段状态从在转变中改变为作为所有者的Y。Y现在能够在不检查X的情况下存取该存储段中的磁盘块。
如果节点X在存储段状态为在转变中时失效,则如果节点Y没有数据项的当前拷贝,那么恢复的节点(节点Y,如果其继续存在)将需要应用为节点X中的该存储段所生成的重做(并且如果节点Y也失效,则可能在节点Y中生成重做)。
情况C假设节点X中止进行中的调用,并且清除脏数据项。在这些情况下,节点Y能够在无缓存相关性的情况下直接从磁盘读取块。然而,如果X中有未应用的重做,则该块可能需要被更新。存储段将被认为在转变中,直至在X中产生的所有重做已经被Y应用并被写入磁盘。这对于防止X使其校验点越过尚没有反映在磁盘上的重做段而言是需要的。
如果节点X在存储段状态为在转变中时失效,则如果节点Y没有数据项的当前拷贝,那么恢复的节点(节点Y,如果其继续存在)将需要应用为节点X中的该存储段所生成的重做(并且如果节点Y也失效,则可能在节点Y中生成重做)。
情况D假设节点X继续执行进行中的调用。节点X和节点Y将需要在从磁盘存取块之前互相校验。当所有进行中的调用已经完成并且所有的块均被写出或转移至Y时,Y被标记为新所有者。从这一刻起,无需缓存相关性。
如果节点X或节点Y在存储段状态为在转变中时失效,则必须执行恢复。在此环境下使用的恢复技术可能类似于在2002年3月4日提交的美国专利号6,353,836和美国专利申请号10/092,047中描述的技术,其每个都被完整的结合于此。如果两个节点都失效,则需要合并来自X和Y的重做日志。
如在情况D中所述,允许节点X继续执行进行中的调用可以带来各种益处。特别地,允许节点X继续执行进行中的调用,使得所有权将在对正在进行的事务影响最小的情况下被再分配。然而,其要求缓存相关性和在节点X和节点Y之间为存储段B执行的恢复方案。
一种用于在这些情况下提供缓存相关性的方法,包括让节点X获得用于其当前为存储段B缓存的所有数据项的锁。用于B中的所有数据项的主/目录节点能够被分配作为节点Y。然后向所有节点发送存储段B将从X移动至Y的通知。该通知无效/更新所有权映射,使得对B的进一步存取将被发送至Y。
如果在此之前发生失效,则所有权再分配操作被中止。否则映射被更新来指示Y是新所有者并且缓存相关性有效。
然后X和Y为存储段B中的所有数据项执行缓存相关性协议,诸如美国专利号6,353,836和美国专利申请号10/092,047中描述的协议。当B中不再存在脏数据项时,可以停止缓存相关性协议。Y可以释放其可能已经为B中的数据项获得的任何锁。
根据一个实施例,缓存相关性协议总是有效,使得拥有存储段的节点也是这些锁的支配者。在多数情况下,每个节点将只分配局部锁(因为其是支配者)并且缓存相关性消息将只在所有权改变时被需要。当所有权改变时,在该存储段中打开的锁可以动态地重新分配给(remaster)新所有者。
所有权改变前的修改根据实施例,在所有权改变之前修改节点X中的数据的子事务将仍被认为在起作用,因为事务退回将需要这些改变。如果事务退回并且其已经对节点X中的该存储段做出改变,则节点Y将需要通过从共享磁盘日志的X的部分中读取撤销日志来应用撤销日志。
在所有权改变之前修改节点X中的数据的子事务可能会更新节点Y中的相同数据。这要求诸如节点Y中的行锁或页锁的事务锁的请求需要与节点X协调。如果子事务请求锁并且该锁已经由其在节点X中的同级(sibling)事务所持有,则同意锁的请求。然而,如果锁由不相关的事务持有,则锁请求被阻塞。等待-图表将该等待反映为对母事务(parent transaction)的等待,从而可以检测全局死锁。一旦所有权改变完成,并且已经获得锁以存取节点X中的存储段B中的数据的所有事务已经结束(提交或中止),则事务锁只需要局部锁。
通过在开始所有权改变之前使数据库服务器等待事务完成,事务锁的请求能够始终被局部地协调。
硬件综述图2是示出可以执行本发明的实施例的计算机系统200的框图。计算机系统200包括用于传递信息的总线202或其它通信装置以及用于处理信息的与总线202连接的处理器204。计算机系统200还包括连接至总线202的主存储器206,诸如随机访问存储器(RAM)或者其它动态存储装置,用于储存信息和将由处理器204执行的指令。在执行将由处理器204执行的指令期间,主存储器206还可用于储存临时变量或其他中间信息。计算机系统200进一步包括只读存储器(ROM)208或连接至总线202的其他静态存储装置,用于存储静态信息和处理器204的指令。提供诸如磁盘或光盘的存储设备210,并连接至总线202用于存储信息和指令。
计算机系统200可以经由总线202连接至诸如阴极射线管(CRT)的显示器212,用于向计算机用户显示信息。包括字母数字键和其他键的输入装置214连接至总线202,用于将信息和指令选择传递到处理器204。另一种类型的用户输入装置是光标控制216,诸如鼠标、跟踪球、或光标方向键,用于将方向信息和命令选择传递到处理器204并用于控制显示器212上的光标移动。输入装置通常在两个轴上(第一个轴(例如X轴)和第二个轴(例如Y轴))具有两个自由度,使装置能指定平面上的位置。
本发明涉及计算机系统200的使用,用于执行在此描述的技术。根据本发明的一个实施例,通过计算机系统200响应于执行包括在主存储器206中的一个或多个指令的一个或多个序列的处理器204,来实现这些技术。这样的指令可以从诸如存储装置210的其它计算机可读介质读入主存储器206。包括在主存储器206中的指令序列的执行,使得处理器204执行此处所述的处理步骤。在可选实施例中,可以使用硬连线电路(hard-wired circuitry)来取代软件指令或者与软件指令结合来实施该发明。因此,本发明的实施例将不限于硬件电路和软件的任何特定组合。
这里使用的术语“计算机可读介质”是指参与向处理器204提供指令用于执行的任何介质。这种介质可以采取多种形式,包括但不限于非易失性介质、易失性介质、和传递介质。非易失性介质举例来说包括光盘或磁盘,诸如存储装置210。易失性介质包括动态存储器,诸如主存储器206。传输介质包括同轴电缆、铜线、和光纤,包括组成总线202的导线。传输介质还可采取声波或光波形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。
通常形式的计算机可读介质包括如软盘、软性盘、硬盘、磁带,或者任何其它磁性介质、CD-ROM、任何其它光介质、打孔纸、纸带、或者任何带孔图样的物理介质、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者盒式磁带,或者以下提到的载波、或者计算机可读的任何其他介质。
各种形式的计算机可读介质可参与将一个或者多个指令的一个或多个序列承载到处理器204用于执行。例如,指令开始可承载在远程计算机的磁盘中。远程计算机可以将指令加载到其动态存储器中,然后使用调制解调器通过电话线发送指令。计算机系统200本地的调制解调器可接收电话线上的数据,并使用红外发射器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,并且合适的电路可以将数据放到总线202上。总线202将数据承载到主存储器206,处理器204从主存储器取回并执行这些指令。在由处理器204执行这些指令之前或之后,由主存储器206接收的指令可随意地储存在存储装置210上。
计算机系统200还包括连接至总线202的通信接口218。提供双向数据通信的通信接口218,连接到与局域网222连接的网络链路220。例如,通信接口218可以是综合业务数字网(ISDN)卡或者调制解调器,用于提供到相应类型的电话线的数据通信连接。又如,通信接口218可以是局域网(LAN)卡,用于提供至兼容局域网(LAN)的数据通信连接。也可以使用无线链路。在任何这样的实施中,通信接口218发送和接收承载表示各种类型的信息的数字数据流的电信号、电磁信号、和光学信号。
网络链路220通常可通过一个或者多个网络向其它数据装置提供数据通信。例如,网络链路220可通过局域网222与主机224连接,或者与互联网服务提供商(ISP)226操作的数据设备连接。ISP226又通过目前通称为“互联网”228的全球分组数据通信网络提供数据通信服务。局域网222和互联网228都使用承载数字数据流的电信号、电磁信号、或光学信号。通过各种网络的信号和网络链路220上的信号以及通过通信接口218的信号,都传送数字数据给计算机系统200或者传送来自计算机系统的数字数据,是传输信息的载波的示例性形式。
计算机系统200能通过网络、网络链路220、和通信接口218发送消息和接收 数据(包括程序代码)。在互联网的实例中,服务器230可通过互联网228、ISP 226、局域网222、和通信接口218,传送用于应用程序的所请求的程序代码。
所接收的代码可以在其被接收时由处理器204执行,和/或储存在存储装置210或者其它非易失性介质中用于随后执行。按照这种方式,计算机系统200可以以载波的形式获得应用代码。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种用于管理数据的方法,所述方法包括以下步骤在能够存取多个节点的持久存储器上保持多个持久数据项,所述持久数据项包括存储于所述持久存储器上的特定位置的特定数据项;将所述持久数据项中的每个的独占所有权分配给所述节点中的一个,其中,所述多个节点的特定节点被分配有所述特定数据项的独占所有权;当任何节点想要执行涉及所述特定数据项的操作时,由所述特定数据项存在于所述特定位置,因此期望所述操作被执行的所述节点将所述操作传送至所述特定节点,用于所述特定节点对所述特定数据项执行所述操作;当第一节点继续操作时,在不将所述特定数据项从所述持久存储器上的所述特定位置移动的情况下,将所述特定数据项的所有权从所述特定节点再分配到另一节点;在所述再分配之后,当任何节点想要执行涉及所述特定数据项的操作时,由于所述特定数据项存在于所述特定位置,因此期望所述操作被执行的所述节点将所述操作传送至所述其他节点,用于所述其他节点对所述特定数据项执行所述操作。
2.根据权利要求1所述的方法,其中,所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤包括,更新在所述多个节点中共享的所有权映射。
3.根据权利要求1所述的方法,其中,所述多个节点是多节点数据库系统的节点。
4.根据权利要求3所述的方法,其中,所述多节点数据库系统包括不能够存取所述持久存储器的节点。
5.根据权利要求3所述的方法,其中所述持久存储器是由所述多节点数据库系统使用的多个持久存储器的第一持久存储器;以及所述方法进一步包括,将第二数据项的所有权从能够存取所述第一持久存储器的第一节点再分配到能够存取第二持久存储器但不能够存取所述第一持久存储器的第二节点;并且其中,所述再分配所述第二数据项的所有权的步骤包括,将所述第二数据项从所述第一持久存储器移动至所述第二持久存储器。
6.根据权利要求3所述的方法,其中,响应于将所述其他节点添加到所述多节点数据库系统,执行所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤。
7.根据权利要求3所述的方法,其中预期到将从所述多节点数据库系统去除所述特定节点,执行所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤;并且所述方法进一步包括以下步骤,预期到将从所述多节点数据库系统去除所述特定节点,将第二数据项从所述持久存储器物理地移动到另一持久存储器,其中,所述第二数据项从所述特定节点再分配到不能够存取所述持久存储器的所述多节点数据库系统的节点。
8.根据权利要求3所述的方法,其中,所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤被执行作为所有权从所述特定节点到一个或多个其他节点的逐渐转移的一部分。
9.根据权利要求8所述的方法,其中,响应于检测到相对于所述多节点数据库系统的一个或多个其他节点而言所述特定节点工作过度,开始所述逐渐转移。
10.根据权利要求9所述的方法,其中,响应于检测到相对于所述多节点数据库系统的一个或多个其他节点而言所述特定节点不再工作过度,终止所述逐渐转移。
11.根据权利要求3所述的方法,其中,所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤被执行作为所有权从一个或多个其他节点到所述其他节点的逐渐转移的一部分,其中,响应于检测到相对于所述多节点数据库系统中的一个或多个其他节点而言所述其他节点工作不足,开始所述逐渐转移。
12.根据权利要求3所述的方法进一步包括以下步骤在已经从所述多节点系统去除第一节点之后,继续使一组数据项由所述第一节点拥有;以及响应于检测到对涉及所述数据项的操作的请求,将数据项的所有权从所述第一节点再分配到一个或多个其他节点。
13.根据权利要求3所述的方法进一步包括以下步骤在已经从所述多节点系统去除第一节点之后,继续使一组数据项由所述第一节点所拥有;以及响应于检测到第二节点的工作负荷已经降至预定阈值以下,将数据项的所有权从所述第一节点再分配到所述第二节点。
14.根据权利要求1所述的方法,其中当所述特定数据项将被再分配给所述其他节点时,所述特定节点在易失存储器中存储所述特定数据项的脏版本;以及所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤包括,将所述特定数据项的所述脏版本写入所述持久存储器。
15.根据权利要求1所述的方法,其中当所述特定数据项将被再分配给所述其他节点时,所述特定节点在易失存储器中存储所述特定数据项的脏版本;以及所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤包括,将与所述脏版本相关的一个或多个重做记录强加到持久存储器,并且在不将所述特定数据项的所述脏版本写入所述持久存储器的情况下,从所述易失存储器清除所述脏版本;所述其他节点通过对存在于所述持久存储器上的所述特定数据项的版本应用所述一个或多个重做记录,来重建所述脏版本。
16.根据权利要求1所述的方法,其中当所述特定数据项将被再分配给所述其他节点时,所述特定节点在易失存储器中存储所述特定数据项的脏版本;并且所述方法进一步包括以下步骤,将所述特定数据项的所述脏版本从与所述特定节点相关的易失存储器转移至与所述其他节点相关的易失存储器。
17.根据权利要求16所述的方法,其中,所述转移所述脏版本的步骤由所述特定节点在不经所述其他节点请求所述脏版本的情况下主动执行。
18.根据权利要求16所述的方法,其中,所述转移所述脏版本的步骤由所述特定节点响应于来自所述其他节点的对所述脏版本的请求而执行。
19.根据权利要求1所述的方法,其中在不等待正修改所述数据项的事务提交的情况下,执行所述将所述特定数据项的所有权从所述特定节点再分配到另一节点的步骤;当所述特定数据项由所述特定节点所拥有时,所述事务做出第一组修改;以及当所述特定数据项由所述其他节点所拥有时,所述事务做出第二组修改。
20.根据权利要求19所述的方法进一步包括,通过基于与所述其他节点相关的撤销日志中的撤销记录退回所述第二组修改,并且基于与所述特定节点相关的撤销日志中的撤销记录退回所述第一组修改,来退回由所述事务做出的改变。
21.根据权利要求1所述的方法,其中,所述方法包括以下步骤所述其他节点接收到更新所述数据项的请求;确定所述特定节点是否能够以独占模式或共享模式存取所述数据项;如果所述特定节点不能够以独占模式或共享模式存取所述数据项,则所述其他节点在不等待所述特定节点将所述数据项的任何脏版本或脏版本的重做转储到持久存储器的情况下,更新所述特定数据项。
22.根据权利要求1所述的方法进一步包括以下步骤响应于将所述特定数据项的所有权转移至所述其他节点,中止涉及所述特定数据项的进行中的操作;在所述特定数据项的所有权已经被转移至所述特定节点之后,重新执行所述进行中的操作。
23.根据权利要求1所述的方法,其中在所述特定数据项的所有权的转移将被执行时,涉及所述特定数据项的操作在进行中;所述方法进一步包括以下步骤,基于一组一个或多个因素,确定是否等待所述进行中的操作完成;以及如果确定不等待所述进行中的操作完成,则中止所述进行中的操作。
24.根据权利要求23所述的方法,其中,所述一组一个或多个因素包括所述进行中的操作已经执行了多少工作。
25.一种用于管理数据的方法,所述方法包括以下步骤在能够存取多个节点的持久存储器上保持多个持久数据项;通过将每个数据项分配给多个存储段中的一个,将所述持久数据项中的每个的所有权分配给所述节点中的一个;以及将每个存储段分配给所述多个节点中的一个;其中,分配有存储段的节点被建立作为被分配给所述存储段的所有数据项的所有者。当第一节点想要执行涉及由第二节点所拥有的数据项的操作时,所述第一节点将所述操作传送给所述第二节点,用于所述第二节点执行所述操作。
26.根据权利要求25所述的方法,其中,通过对与每个数据项相关的名称应用散列函数来执行所述将每个数据项分配给多个存储段中的一个的步骤。
27.根据权利要求25所述的方法,其中,通过对与每个存储段相关的标识符应用散列函数来执行所述将每个存储段分配给所述多个节点中的一个的步骤。
28.根据权利要求25所述的方法,其中,使用基于范围的分区来执行所述将每个数据项分配给多个存储段中的一个的步骤。
29.根据权利要求25所述的方法,其中,使用基于范围的分区来执行所述将每个存储段分配给所述多个节点中的一个的步骤。
30.根据权利要求25所述的方法,其中,通过列举单个数据项对存储段的关系来执行所述将每个数据项分配给多个存储段中的一个的步骤。
31.根据权利要求25所述的方法,其中,通过列举单个存储段对节点的关系来执行所述将每个存储段分配给所述多个节点中的一个的步骤。
32.根据权利要求25所述的方法,其中,存储段的数量大于节点的数量,并且所述存储段对节点的关系是多对一关系。
33.根据权利要求25所述的方法进一步包括以下步骤,通过在不修改数据项到存储段的映射的情况下修改存储段到节点的映射,来将被映射到存储段的所有数据项的所有权从第一节点再分配到第二节点。
34.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求1中所述的方法。
35.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求2中所述的方法。
36.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求3中所述的方法。
37.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求4中所述的方法。
38.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求5中所述的方法。
39.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求6中所述的方法。
40.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求7中所述的方法。
41.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求8中所述的方法。
42.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求9中所述的方法。
43.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求10中所述的方法。
44.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求11中所述的方法。
45.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求12中所述的方法。
46.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求13中所述的方法。
47.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求14中所述的方法。
48.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求15中所述的方法。
49.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求16中所述的方法。
50.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求17中所述的方法。
51.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求18中所述的方法。
52.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求19中所述的方法。
53.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求20中所述的方法。
54.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求21中所述的方法。
55.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求22中所述的方法。
56.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求23中所述的方法。
57.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求24中所述的方法。
58.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求25中所述的方法。
59.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求26中所述的方法。
60.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求27中所述的方法。
61.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求28中所述的方法。
62.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求29中所述的方法。
63.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求30中所述的方法。
64.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求31中所述的方法。
65.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求32中所述的方法。
66.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求33中所述的方法。
67.一种用于多节点无共享数据库系统的方法,所述方法包括以下步骤所述多节点无共享数据库系统的第一节点开始起到第一数据项和第二数据项的独占所有者的作用,其中,所述第一数据项和所述第二数据项是由所述多节点无共享数据库系统管理的数据库中的持久地存储的数据项;在不改变第一数据项在持久存储器上的位置或关闭所述第一节点的情况下,将所述第一数据项的所有权从所述第一节点再分配到所述多节点无共享数据库系统的第二节点;以及在再分配所有权之后,所述第一节点继续作为所述第二数据项的所有者,并继续处理对所述第二数据项的操作的所有请求。
全文摘要
本发明描述了用于提高无共享数据库系统的性能的各种技术,其中,运行该无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。特别地,提供用于在不改变数据在持久存储器上的位置的情况下改变无共享数据库中的数据的所有权的技术。由于数据的持久存储位置在数据的所有权的转移期间没有被改变,因此可以更加自由地转移所有权,并且具有比由数据的物理重新布置另外的招致的更小的性能损失。还描述了用于提供所有权的快速运行时再分配的各种技术。由于能够在运行时期间执行再分配,因此不必使无共享系统脱机来执行再分配。另外,这些技术描述了如何以相对的精细粒度来执行再分配,避免仅仅为了再分配在节点中的一个节点上的少数数据项的所有权而需要执行经过所有节点的大量数据的大量再分配。
文档编号G06F9/46GK1829961SQ200480021585
公开日2006年9月6日 申请日期2004年7月28日 优先权日2003年8月1日
发明者罗杰·J·班福德, 萨希坎什·钱德拉塞克拉, 安杰洛·普鲁希诺 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1