数据所有权的动态再分配的制作方法

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


通过附图中的实例来描述本发明,但是不局限于此,在附图中相同的参考标号表示类似的元件,其中图1是示出根据本发明的实施例的包括两个共享磁盘子系统的群的框图;以及图2是可以实施本发明的实施例的计算机系统的框图。
具体实施例方式
下文中描述了用于提高包括共享磁盘存储系统的无共享数据库系统的性能的各种技术。在下面的描述中,为了解释的目的,描述了多个特定的细节,以对本发明有彻底的了解。然而,很显然,在没有这些特定细节的情况下,也可以实现本发明。在其它的实例中,以框图形式示出已知的结构和设备,以避免不必要地使本发明不清楚。
功能概述下文中描述了用于提高无共享数据库系统的性能的各种技术,其中,运行无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。正如由数据库系统的无共享结构所确定的,在任何给定的时间,每个数据项仍然仅由一个节点拥有。然而,利用运行无共享数据库系统的节点中的至少一些节点能够共享的存取磁盘这一事实,以更有效地重新平衡并恢复无共享数据库系统。
特别地,提供用于基于诸如相对于特定操作的性能而言哪个节点将是最有效的所有者的因素,来动态地改变无共享数据库中的数据的所有权的技术。一旦确定了,则数据的所有权可以被永久地或在特定操作期间临时地改变到新所有者。
为了避免与传统的所有权再分配操作相关的系统开销,可以使用在50277-2277中描述的技术来执行所有权再分配,其不要求将正被再分配的数据从数据存在于持久存储器上的位置移动。
包括共享磁盘系统的示例性群(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)来协调对无共享数据库中的用户数据的存取,这是因为任何给定的数据项仅由单个节点拥有。然而,因为无共享数据库的所有节点均要求存取所有权映射,因此可能需要一些锁定来防止对所有权映射的不一致的更新。
根据一个实施例,当数据项的所有权正在从一个节点(“原所有者”)被再分配到另一节点(“新所有者”)时,使用两节点锁定方案。另外,全局锁定机制可以用于控制对与无共享数据库相关的元数据的存取。这样的元数据可以包括例如所有权映射。
基于存储段(bucket)的分区如上所述,由无共享数据库管理的数据被分区,并且每个分区中的数据由一个节点独占地拥有。根据一个实施例,通过将数据分配给逻辑存储段来建立分区,然后将每个存储段分配给分区。因此,所有权映射中的数据到节点的映射包括数据到存储段的映射和存储段到节点的映射。
根据一个实施例,数据到存储段的映射通过对每个数据项的名称运用散列函数来建立。类似地,存储段到节点的映射可以通过对与存储段相关的标识符运用另一散列函数来建立。可选地,该两个映射或其中之一可以使用基于范围的分区来建立,或通过简单地列举每个个体关系来建立。例如,可以通过将数据项的名字空间划分为五十个范围将一百万个数据项映射到五十个存储段。然后通过为每个存储段存储记录可以将五十个存储段映射到五个节点,该记录用于(1)识别存储段并且(2)识别当前分配有存储段的节点。
相对于其中为每个数据项存储单独的映射记录的映射而言,存储段的使用显著地减少了所有权映射的大小。另外,在存储段的数量超过节点的数量的实施例中,存储段的使用使得将所有权再分配给由给定的节点拥有的数据的子集相对容易。例如,新节点可以从当前分配有十个存储段的节点被分配单个存储段。这样的再分配将简单地涉及为该存储段修改指示存储段到节点的映射的记录。被再分配的数据的数据到存储段的映射不必被改变。
如上所述,可以通过使用各种技术(包括但不限于散列分区、范围分区、或列值)中的任何一种来建立数据到存储段的映射。如果使用基于范围的分区并且范围的数量不显著地大于节点的数量,只要用于对数据项分区的范围关键码(range key)是不会改变的值(例如数据),则数据库服务器可以采用更精细的(更狭窄)范围来实现所需数量的存储段。如果范围关键码是可以改变的值,则响应于用于特定数据项的范围关键码值的改变,数据项从其原存储段被去除并被添加到对应于数据项的范围关键码的新值的存储段。
建立所有权的初始分配使用上述的映射技术,可以在多个节点之中共享单个表或索引的所有权。最初,所有权的分配可以是随机的。例如,用户可以选择用于数据到存储段的映射的关键码和分区技术(例如,散列、范围、列表等),以及用于存储段到节点的映射的分区技术,但是不需要指定存储段到节点的初始分配。数据库服务器然后可以基于用于数据到存储段的映射的关键码来确定用于存储段到节点的映射的关键码,并且在不考虑由存储段表示的特定数据和数据库对象的情况下创建初始存储段到节点的分配。
例如,如果用户选择基于关键码A将对象分区,则数据库服务器将使用关键码A来决定存储段到节点的映射。在一些情况下,数据库服务器可以添加附加关键码或对用于数据到存储段的映射的关键码应用不同的函数(只要其保存数据到存储段的映射)。例如,如果使用关键码A将对象散列分区成四个数据存储段,则数据库服务器可以通过对关键码B应用散列函数以确定存储段到节点的映射,或通过简单地将散列值的数目增加到12,将这四个存储段中的每个细分成三个存储段(以允许存储段到节点的灵活分配)。如果散列是模数函数(modulo function),则第0个、第4个、和第8个存储段到节点的存储段将对应于第0个数据到存储段的存储段,第1个、第5个、和第9个存储段到节点的存储段将对应于第1个数据到存储段的存储段等。
另一个实施例是,如果该对象根据DATE类型的关键码A被范围分区,则可以通过使用返回年度的年度(日期)函数来指定数据到存储段的映射。但是存储段到节点的映射可以由数据库服务器通过使用月份和年度(日期)而在内部计算。每个年度分区被分成12个存储段到节点的存储段。如果数据库服务器确定特定年度的数据被经常地(通常是本年度)存取,则该方法可以在其他节点之中再分配这12个存储段。
在上面给出的两个实例中,给出存储段到节点的存储段#,则数据库服务器能够唯一地确定数据到存储段的存储段#。同样在这些实例中,用户选择用于数据到存储段的映射的关键码和分区技术。然而,在可选实施例中,用户可以不选择用于数据到存储段的映射的关键码和分区技术。相反,用于数据到存储段的映射的关键码和分区技术也可以由数据库服务器自动地决定。
根据一个实施例,数据库服务器基于应当向每个节点分配多少存储段来进行初始的存储段到节点的分配。例如,具有较大容量的节点可以被分配有更多的存储段。然而,在初始分配中,哪个特定存储段应当被分配给哪个节点的决定是随机的。
在可选实施例中,当进行存储段到节点的分配时,数据库服务器的确考虑哪个数据由存储段表示。例如,假设用于特定表的数据在若干存储段中被划分。数据库服务器可以有意识的将所有这些存储段分配到相同的节点,或有意识的在许多节点之中分配这些存储段的所有权。类似地,在初始分配中,数据库服务器可能试图将与表相关的存储段分配给同与用于这些表的索引相关的存储段相同的节点。相反地,数据库服务器可能试图将与表相关的存储段分配给不同于与用于这些表的索引相关的存储段被分配到的节点的节点。
基于工作负荷的自动所有权再分配不考虑如何进行初始分配,事实上不可能确保初始分配将引起数据库服务器将被要求执行的所有操作的最优执行。因此,根据本发明的一个实施例,基于通过监控数据库系统的实际运行时操作而汇总的统计表来自动地再分配所有权。
例如,在一个实施例中,无共享数据库系统包括监控机制,用于监控由节点作出的请求,并用于为每个存储段保持关于非所有者节点请求涉及来自该存储段的数据的操作的频率的统计表。根据一个实施例,所有权映射被保持在持久存储器上,但是由监控机制保持的统计表被保持在易失存储器中。
基于统计表,数据库服务器可以确定,特定非所有者节点以比任何其他节点大得多的频率请求涉及来自特定存储段的数据的操作。基于该信息,数据库服务器可以自动地将该存储段的所有权再分配到该特定节点。
非所有者节点请求涉及存储段的操作的频率只不过是可以包含在所有权再分配决定中的许多执行因素的一个实例。例如,监控机制还可以为其自己的利益而追踪所有者节点对来自特定存储段的数据执行操作(“自服务操作”)的频率。如果特定存储段的所有者节点正在比正在请求对特定存储段的操作的任何非所有权节点更经常地对来自特定存储段的数据执行自服务操作,则数据库服务器可以选择不再分配存储段的所有权。即使非所有者节点正在比正在对存储段执行自服务操作的所有权节点更经常地请求对特定存储段的操作,数据库服务器也可以被设置为仅当利用差异超过确定阈值时转移所有权。
根据一个实施例,如果监控机制检测到若干节点以大约相同的频率存取诸如表的特定资源,则数据库服务器可以在这些节点之中均匀地分布与该表相关的存储段的所有权。因此,如果表被大量的存取,则存取该表的工作将在可用的节点之中更均匀地被分布。
当基于哪个节点最经常地存取该存储段中的数据来调整存储段的所有权超时时,逻辑地表示相关数据的存储段将趋向于由相同的节点拥有。例如,对应于来自特定表的数据的存储段将趋向于由与对应于建立在该表上的索引的存储段相同的节点拥有。
通过基于关于实际存储段利用的统计表来再分配所有权,避免了执行其他更复杂的分配决定的需要。例如,所有权无需基于考虑SQL WHERE子句、JOIN条件、或AGGREGATION的查询设置表(query profile)。类似地,用户不需要明确地对数据指定事务的相似性。此外,当数据存在于由让与节点和受让节点共享的磁盘上时,无共享数据库服务器能够在没有物理数据再分配的情况下很快地适应工作负荷的失衡或改变。由于由存在于共享磁盘上的数据产生的再分配的最小成本,无共享数据库服务器能够在不使用任何外部工具的情况下有效地进行数据所有权的改变并测量性能。
平衡再分配如果特定节点继续拥有其所有初始存储段,并且因为该特定节点经常地存取这些存储段中的数据而被动态地分配有若干新存储段,则该节点可能变得工作过度,从而使得数据库系统的工作负荷变得失衡。类似地,在没有任何存储段被再分配给该特定节点的情况下,如果特定节点的许多初始存储段被再分配给其他节点,则工作负荷将变得失衡。
因此,当存储段的所有权被分配给特定节点时,可能希望将不同存储段的所有权从该节点再分配到另一节点。类似地,当存储段的所有权从特定节点被分配时,可能希望将不同存储段的所有权再分配给该特定节点。被进行用于对抗其他再分配的失衡影响的这种再分配,在此称为“平衡再分配”。
因为再分配操作涉及一些系统开销,因此可能希望仅在满足了确定的失衡阈值之后执行平衡再分配。例如,数据库服务器可以为节点中的每个节点保持“目标存储段数量”。如果由特定节点拥有的存储段的数量降至比该特定节点的目标存储段数量低预定量,则可以执行平衡再分配以将一个或多个存储段从其他节点分配到该特定节点。例如,可以基于节点所拥有的存储段的数量超过其各自目标存储段数量的多少,来选择从其再分配存储段的节点。
类似地,如果由特定节点拥有的存储段的数量以预定量超过特定节点的目标存储段数量,则可以执行平衡再分配以将一个或多个存储段从该特定节点分配到其他节点。例如,可以基于节点拥有的存储段的数量降至低于其各自目标存储段数量的多少,来选择存储段被再分配到的节点。
数据库服务器在确定在平衡再分配期间将再分配哪个存储段的过程中可以使用多种因素。例如,数据库服务器可以选择在让与节点的自服务操作中最不经常涉及的让与节点的存储段。可选地,数据库服务器可以选择在由受让节点请求的操作中最经常的涉及的让与节点的存储段。根据一个实施例,数据库服务器考虑许多因素,包括存储段在让与节点的自服务操作中被涉及的频率以及该存储段在由受让节点请求的操作中被涉及的频率。
临时所有权分配在前面的部分中,描述了用于在监控时段基于诸如哪些节点正在要求对数据的哪些存储段的操作的因素来再分配所有权的技术。然而,虽然以这种方式进行的再分配最后可能是最优的,但是该分配并不是对任何给定的操作都是最优的。因此,根据一个实施例,数据库服务器包括用于在一组一个或多个操作期间临时地改变存储段的所有权分配的逻辑。在完成一组操作之后,存储段被再分配回到其先前所有者。
例如,数据库服务器能够仅在大操作期间改变数据的所有权。因此,在一天之内,对应于表的所有存储段能够由单一节点拥有。因此,在该天之内,对该表的所有请求被发送到该节点。可以为日尾(end-of-day)报告对相同的表“再分区”,以平行用于检索日尾报告的数据的查询。
另一实例是,数据库服务器能够在恢复操作期间改变数据的所有权。特别地,数据库服务器能够临时的均一地将存储段再分配到所有节点,并且在每个节点拥有的这些存储段中,每个节点能够相对于其他节点并行的进行向前重做恢复和向后事务退回。这样的所有权再分配可以用于数据库恢复操作和介质恢复操作。例如,在介质恢复操作期间,在最新备份已经被恢复之后,每个节点能够从档案并行的应用重做。在这些情况下,参与并行的介质恢复的每个节点将需要能够读取适当的重做日至和档案。
当前不拥有数据的节点上的并行查询部件(slave)的灵活安排如上所述,数据的所有权在操作期间可以被临时的改变。例如,可以使用这样的临时分配,以提高指定能够并行的操作的查询的性能。当操作是并行的时,该操作被分解成能够彼此平行的被执行的若干子任务。用于执行这样的子任务的处理称为并行查询部件。
当在共享磁盘环境中实施无共享数据库系统时,并行查询部件的安排并不是由数据的物理位置规定的。例如,假设表T中的数据(1)存在于由两个节点1和2共享的磁盘上,并且(2)属于对应于表T的分区的两个存储段B1和B2。请求扫描表T的查询可以被分成两个子任务对存储段B1中的数据的扫描和对存储段B2中的数据的扫描。假设在数据库服务器被请求执行该查询时,节点1是存储段B1和B2的所有者。在这些情况下,B2的所有权能够被临时地再分配给节点2,使得节点2上的部件能够执行B2的扫描,而节点1上的部件能够执行B1的扫描。
在上面的实例中,一个存储段的所有权被临时地分配到另一节点,以在可并行的查询的处理中涉及更多的节点。相反地,可能希望以减少在处理查询的过程中涉及的节点的数量的方式,临时地再分配所有权。例如,假设查询请求由第一组部件扫描该数据,然后再分配给第二组部件,使得第二组部件能够对该数据执行一些后续操作。如果扫描由分散至许多节点的部件执行,则由该查询请求的再分配将导致大量的节点内通信。为了减少节点内通信的量,可以强化表T的分区的所有权。
例如,如果在查询开始时B1由节点1拥有并且B2由节点2拥有,则在查询期间,可以通过临时地将B2从节点2分配到节点1来强化表T的所有权。在这些情况下,第一和第二组部件将在节点1上。因此,在扫描之后发生的再分配将导致节点内通信。
在没有所有权的情况下工作如上所述,在无共享数据库系统中,只有数据项的所有者允许执行涉及该数据的任务。然而,根据本发明的一个方面,数据项的非所有者是否允许对该数据进行操作,取决于该操作所需的隔离级(isolation level)。
例如,在标题为“Method And Apparatus For Providing IsolationLevels In A Database System””的美国专利第5,870,758号中,详细的描述了隔离级的概念。在数据库系统环境中,已经限定了若干隔离级。限定的隔离级包括“读未提交(read uncommitted)”隔离级和“读已提交(read committed)”隔离级。不反对脏读、不可重复读、和幻读的读未提交隔离级对于诸如数据挖掘和统计查询的某些操作是足够的。对于这些操作而言,对数据项执行操作的大查询片断能够运行在不拥有这些数据项的节点上。
不同于读未提交隔离级,读已提交隔离级反对脏读。对于需要读已提交隔离级的操作而言,在涉及该数据项的操作执行之前,拥有一组数据项的节点可以将包含该数据项的已提交的页转储到磁盘。在页已经被转储到磁盘之后,不拥有该数据项的节点可执行涉及该数据项的操作。由于已提交的页被转储到磁盘,因此能够共享地存取该磁盘的非所有者节点能够看到该已提交的页。因此,读已提交隔离级被保持。在该操作的执行期间,所有者可以将数据项标记为只读,直到操作完成。
使用共享磁盘用于协调者-部件通信当查询是并行的时,一个节点常常充当协调参与了执行该查询的各种部件的角色。通常称为“协调者”的该节点常常接收由参与的部件产生的临时结果。协调者从查询部件接收的数据量可能是巨大的。因此,根据本发明的一个方面,如果将被传送的数据量将压倒节点之间的互连,则将要从查询部件被传送到协调者的临时结果通过共享磁盘被传送。特别地,如果由部件生成的临时结果的量超过了确定阈值,则该结果被写入在部件和协调者之间共享的磁盘,而不是从部件所存在的节点的易失存储器直接发送到协调者所在的节点的易失存储器。以这种方式使用共享磁盘作为中介物对于阻塞运算符(其中,运算符的用户需要等待,直到子运算符完成(即,在运算符之间没有流水线操作))而言尤其有用。
硬件综述图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.根据权利要求1所述的方法,其中,在不接收指定所述持久数据项将被再分配到的节点的用户输入的情况下,执行所述动态地再分配的步骤。
5.根据权利要求3所述的方法,其中,在所述多节点数据库系统继续处理来自数据库应用程序的数据库指令时,执行所述动态地再分配的步骤。
6.根据权利要求1所述的方法,其中,在确定的时间段之后,并且基于在所述确定的时间段期间哪个节点请求涉及所述持久数据项的操作,执行所述动态地再分配的步骤。
7.根据权利要求6所述的方法,其中,所述动态地再分配的步骤包括,将所述特定数据项的所有权再分配给最经常地请求涉及所述特定数据项的操作的节点。
8.根据权利要求1所述的方法,其中所述动态再分配的步骤包括将所述特定数据项的所有权再分配给第一节点;并且所述方法进一步包括以下步骤,响应于将所述特定数据项的所有权再分配给所述第一节点,将第二数据项的所有权从所述第一节点动态地再分配到第二节点。
9.根据权利要求8所述的方法,其中,将所述特定数据项分配给所述第一节点使得与所述第一节点相关的阈值被超过;并且响应于所述阈值被超过,执行所述动态地再分配所述第二数据项的所有权的步骤。
10.一种用于管理数据的方法,所述方法包括以下步骤在能够存取多个节点的持久存储器上保持多个持久数据项,所述持久数据项包括存储于所述持久存储器上的特定位置的特定数据项;将所述持久数据项中的每个的独占所有权分配给所述节点中的一个,其中,所述多个节点的第一节点被分配有所述特定数据项的独占所有权;当任何节点想要执行涉及所述特定数据项的操作时,由于所述特定数据项由所述第一节点独占拥有,因此期望所述操作被执行的所述节点将所述操作传送至所述第一节点,用于所述第一节点对所述特定数据项执行所述操作;当所述特定数据项的独占所有权由所述第一节点持有时,接收请求对所述特定数据项执行操作的指令;以及使所述操作由不同于所述第一节点的第二节点执行。
11.根据权利要求10所述的方法,其中,所述使所述操作由第二节点执行的步骤包括在至少只要请求所述第二节点执行所述指令的子操作期间,将所述特定数据项的独占所有权临时地再分配给所述第二节点,其中,所述子操作涉及所述特定数据项;以及在所述期间之后,自动地将所述特定数据项的所述独占所有权再分配回给所述第一节点。
12.根据权利要求11所述的方法,其中,执行所述临时地再分配的步骤,以允许在存在于多个节点上的部件之中分配并行操作的子操作。
13.根据权利要求11所述的方法,其中,执行所述临时地再分配的步骤,以允许在包括所述第二节点并且不包括所述第一节点的一组一个或多个节点强化由所述指令请求的操作。
14.根据权利要求10所述的方法,其中所述使所述操作由第二节点执行的步骤包括,在所述第二节点不获得所述特定数据项的独占所有权的情况下,使所述第二节点执行所述操作;允许所述第二节点存取所述特定数据项,以执行所述指令的子操作,其中,所述子操作涉及所述特定数据项;以及在所述第二节点已经完成所述子操作之后,停止允许所述第二节点存取所述特定数据项。
15.根据权利要求14所述的方法,进一步包括以下步骤决定对所述指令应用读未提交隔离级;并且在不请求所述第一节点将所述特定数据项的任何脏版本转储到磁盘的情况下,允许所述第二节点执行所述子操作。
16.根据权利要求14所述的方法,进一步包括以下步骤决定对所述指令应用读已提交隔离级;并且阻止所述第二节点执行所述子操作,直到所述第一节点已经将所述特定数据项的任何脏版本转储到磁盘。
17.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求1中所述的方法。
18.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求2中所述的方法。
19.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求3中所述的方法。
20.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求4中所述的方法。
21.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求5中所述的方法。
22.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求6中所述的方法。
23.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求7中所述的方法。
24.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求8中所述的方法。
25.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求9中所述的方法。
26.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求10中所述的方法。
27.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求11中所述的方法。
28.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求12中所述的方法。
29.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求13中所述的方法。
30.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求14中所述的方法。
31.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求15中所述的方法。
32.一种计算机可读介质,承载有一个或多个指令序列,当所述指令序列由一个或多个处理器执行时,使所述一个或多个处理器执行在权利要求16中所述的方法。
全文摘要
本发明描述了用于提高无共享数据库系统的性能的各种技术,其中,运行该无共享数据库系统的节点中的至少两个节点能够共享地存取磁盘。特别地,提供用于基于诸如相对于特定操作而言哪个节点将是最有效的所有者的因素,来动态地改变无共享数据库中的数据的所有权的技术。一旦确定了,则数据的所有权可以被永久地或在特定操作期间临时地改变到新所有者。
文档编号G06F9/46GK1829962SQ200480021587
公开日2006年9月6日 申请日期2004年7月28日 优先权日2003年8月1日
发明者罗杰·J·班福德, 萨希坎什·钱德拉塞克拉, 安杰洛·普鲁希诺 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1