对oracle存储器中数据库的存储器中快照存储的多版本并行控制的制作方法

文档序号:9794055阅读:414来源:国知局
对oracle存储器中数据库的存储器中快照存储的多版本并行控制的制作方法
【技术领域】
[0001]本发明涉及数据库系统,并且更具体地,涉及在存储器中以一种格式镜像以另一种格式驻留在盘上的数据。
【背景技术】
[0002]鉴于主存储器变得越来越便宜和越来越大,当数据被存储在存储器中时,需要新的数据格式来加快查询处理。现有的格式是为盘而设计的,并且当存储在存储器中(例如,在缓冲区高速缓存中)时,这些格式对于查询不是最优的。例如,对于数据库系统来说,将数据持久性地存储在“盘块”中是常见的。通常,在每个盘块内,数据以行为主的格式进行布置。即,一行中的所有列的值后面跟着用于下一行的所有列的值。
[0003]为了提高性能,一些盘块可以在易失性存储器内的“缓冲区高速缓存”中进行高速缓存。从易失性存储器访问数据比从盘访问数据明显更快。但是,即使在易失性存储器内,数据仍然是以行为主的盘块格式,这对于某些类型的数据库操作不是最优的。
[0004]与行为主的盘块相比,列状格式对于存储器中的查询处理具有许多吸引人的优点,诸如高速缓存局部性和压缩性。因此,一些数据库服务器现在采用新的表类型,用于以列为主的格式持久性地存储数据。在列为主的格式中,数据可以被读入到易失性存储器中,其中与数据以行为主的盘块存储时相比,它可以被用来更高效地处理某些查询。
[0005]不幸的是,将以行为主的盘块持久性地存储数据的现有数据库迀移到使用新的列为主的表类型的任务不是简单的任务。此外,在执行这种迀移之后,对于可以在以行为主的盘块中存储的数据上更高效执行的查询类别来说,查询处理将变得较为低效。
[0006]作为替代,一些数据库系统将数据保持在行为主的盘块中,但是采用列存储索引。列存储索引不取代现有的表,并且因此不需要将整个数据库迀移到新的表结构。相反,列存储索引更像作为传统的二级索引。例如,这种列存储索引仍然被持久保存到盘中。不幸的是,随着对通过其进行索引的数据执行更新,可能需要大量的开销来维护这种索引。
[0007]作为还有的另一种替代,数据库可以被复制,其中数据库的第一副本用常规的行为主的盘块存储数据,而第二副本以列为主的格式存储数据。当数据库以这种方式进行复制时,利用行为主的数据最高效处理的查询可以被路由到第一副本,而利用列为主的数据最高效处理的查询可以被路由到第二副本。
[0008]不幸的是,由于在被复制的系统之间发生的滞后,这种技术并不能很好地工作。具体而言,在任何给定的时间点,在其中一个副本处做出的一些改变将还没有被应用到另一个副本。因此,在复制机制中固有的滞后会导致不可预测的假像,并且有可能地,导致不正确的结果。
[0009]此外,每个事务通常需要看见其自己的改变,甚至在那些改变已被提交之前。但是,数据库的改变通常直到改变已被提交时才被复制。因此,即使在另一个副本处的数据的格式可能对于一些操作是更高效的,事务也可能被限制为利用其中做出事务未提交的改变的副本。
[0010]本节中描述的方法是可以实行的方法,但不一定是先前已被构思或实行的方法。因此,除非另外指出,否则不应当假定在本节中描述的任何方法仅仅凭其包括在本节中就有资格作为现有技术。
【附图说明】
[0011]在附图中:
[0012]图1是根据实施例的、同时维护在易失性存储器中的镜像格式数据和在持久性存储装置上的持久性格式数据的数据库系统的框图;
[0013]图2a是用于例子的表的框图;
[0014]图2b是根据实施例的、用于表的数据项如何可以被同时以两种格式维护的框图,其中一种格式是存储器中(in-memory)格式;
[0015]图3是示出根据实施例的、存储在易失性存储器中的与镜像格式数据结合的日志的框图;
[0016]图4是示出根据实施例的、来自单个表的数据如何可以基于行的范围在MCU之间进行划分的框图;
[0017]图5a是示出可以如何分配不同的数据库服务器实例来管理不同MF数据集合的框图,其中所述集合基于行的范围;
[0018]图5b是示出可以如何分配不同的数据库服务器实例来管理不同MF数据集合的框图,其中所述集合基于列;
[0019]图6是示出根据实施例的、存储改变行的位图和位改变的记录的SMU的框图;
[0020]图7是示出根据实施例的、用于执行扫描操作的步骤的流程图;
[0021]图8是示出根据实施例的、用于实现改变行的位图的结构的框图;及
[0022]图9是示出可用来实现本文所述的技术的计算机系统的框图。
【具体实施方式】
[0023]在以下描述中,出于解释的目的,阐述了许多具体细节,以便提供对本发明的透彻理解。但是,很显然,本发明可以在没有这些具体细节的情况下进行实践。在其它情况下,众所周知的结构和设备以框图的形式示出,以避免不必要地模糊本发明。
[0024]总体概述
[0025]不同数据格式具有不同的好处。因此,本文所描述的技术用于以一种格式持久性地维护数据,但是使该数据以多于一种的格式对数据库服务器可用。在一种实施例中,其中使数据可用于查询处理的格式中之一是基于盘上(on-disk)格式,而其中使数据可用于查询处理的另一种格式独立于该盘上格式。
[0026]对应于盘上格式的格式在本文被称为“持久性格式”或“PF”。处于持久性格式的数据在本文被称为PF数据。独立于盘上格式的存储器中格式被称为“镜像格式”或“MF”。处于镜像格式的数据在本文被称为MF数据。例如,在一种实施例中,持久性格式是行为主的盘块,而镜像格式是列为主的格式。
[0027]根据一种实施例,镜像格式完全独立于持久性格式。但是,MF数据初始地基于持久存储的PF数据,而不基于任何持久性MF结构在存储器中构建。由于不需要持久性MF结构,因此现有数据库的用户不需要将其现有数据库中的数据或结构迀移到另一种格式。因此,使用行为主的盘块的常规数据库系统可以继续使用那些盘块来持久存储其数据,而无需执行任何数据迀移,同时仍然获得由于具有在易失性存储器中可用的数据的列为主的表示而产生的性能益处。
[0028]存储器中MF数据被维护为在事务上与PF数据一致。MF数据在事务上是一致的,因为从MF数据提供给事务的任何数据项将是如果数据项从PF数据提供的话将会被提供的同一版本。此外,那一版本反映了在事务的快照时间之前提交的所有改变,并且不反映在事务的快照时间之后提交的改变。因此,当提交对在MF数据中被镜像的数据项做出改变的事务时,使得该改变相对于PF数据和MF数据两者都可见。另一方面,如果做出改变的事务被中止或回滚,则该改变相对于PF数据和MF数据两者被回滚。
[0029]在一种实施例中,确保PF数据的读和写之间的一致性的同一事务管理器也被用于确保MF数据的读和写之间的一致性。因为MF数据以在事务上一致的方式保持最新,因此,如果存储器中MF数据包括由数据库操作所需的数据,则数据库操作可以或者从存储器中MF数据或者从PF数据中被满足。
[0030]MF数据镜像已经在PF数据中存在的数据。但是,虽然在MF数据中的所有项都是在PF数据中的对应项的镜像版本(尽管以不同的格式被组织),但是不是所有在PF数据中的项都需要在MF数据中被镜像。因此,MF数据可以是PF数据的子集。
[0031]由于不是所有的PF数据都必须在MF数据中镜像,因此,在一些情况下,查询可能需要只能被PF数据满足的数据。例如,如果表具有列A、B和C,并且只有列A在MF数据中被镜像,则需要来自列B的值的查询必须从PF数据中获得那些值。
[0032]但是,即使在那些情况下,MF数据仍然可以用于(a)满足查询的一部分,和/或(b)加快从PF数据中所需数据的检索。例如,MF数据可以用来识别必须从PF数据中检索的特定行。
[0033]根据一种实施例,为了减少开销,不维护MF数据的盘上拷贝。在一种可替代的实施例中,MF的拷贝可以被存储,但不试图使MF数据的盘上拷贝与正在PF数据上执行的更新保持同步。因此,在失败之后,存储器中MF数据必须基于PF数据的持久性拷贝进行重建。
[0034]在一些实施例中,MF数据被压缩。压缩可以在由用户指定的或基于访问模式的各种压缩级别下执行。
[0035]虽然下文将给出其中镜像格式是列状的实施例,但是镜像格式可以是与持久性格式不同的、对运行存储器中查询有用的任何格式。例如,在可替代的实施例中,PF格式是列为主的,而MF格式是行为主的。无论使用何种特定镜像格式,镜像格式数据都基于现有的PF结构(例如表和索引)在存储器中进行创建,而不会引起对那些结构的格式的改变。
[0036]通用体系架构
[0037]图1是根据一种实施例的数据库系统的框图。参考图1,数据库系统100包括易失性存储器102和持久性存储装置110。易失性存储器102—般表示由数据库系统使用的随机存取存储器,并且可以通过任何数量的存储器设备来实现。通常,当发生故障时,在易失性存储器102存储的数据丢失。
[0038]持久性存储装置110—般表示任何数量的持久性存储设备,诸如磁盘、闪存存储器和/或固态驱动器。与易失性存储器102不同,存储在持久性存储装置110上的数据在发生故障时不会丢失。相应地,在发生故障之后,持久性存储装置110上的数据可用来重建在易失性存储器102中丢失的数据。
[0039]在易失性存储器102中,数据库服务器120正在执行由一个或多个数据库应用(未示出)提交给数据库服务器的数据库命令。被这些应用使用的数据被示为PF数据112 JF数据112以PF数据结构108驻留在持久性存储设备110中。PF结构108可以是,例如,行为主的盘块。虽然行为主的盘块被用于说明的目的,但是PF结构可以采取任何形式,诸如列为主的盘块、混合压缩单元,等等。
[0040]易失性存储器102还包括PF数据的高速缓存106。在高速缓存106内,数据以基于其中数据驻留在PF数据结构108内的格式的格式被存储。例如,如果持久性格式是行为主的盘块,则高速缓存106可以包含行为主的盘块的高速缓存拷贝。
[0041]在另一方面,MF数据104处于与持久性格式无关的格式。例如,在其中持久性格式是行为主的盘块的情况下,镜像格式可以是列为主的压缩单元。由于镜像格式与持久性格式不同,因此MF数据104通过对PF数据执行变换来产生。这些变换既在易失性存储器102被初始地用MF数据104填充时发生(无论在启动时或根据需要时),又在易失性存储器102在发生故障之后用MF数据104重新填充时发生。
[0042]重要的是,MF数据104的存在可以对向数据库服务器提交数据库命令、利用MF数据104的数据库应用是透明的。例如,被设计为与在PF数据112上独自操作的数据库系统交互的那些相同的应用除了 PF数据112之外还可以不加修改地与维护MF数据104的数据库服务器交互。此外,对那些应用透明,该数据库服务器可以使用MF数据104来更高效地处理那些数据库命令中的一些或全部。
[0043]镜像格式数据
[0044]MF数据104可以镜像所有PF数据112或其子集。在一种实施例中,用户可以指定PF数据112的哪一部分是“启用存储器中(in-memory enabled)”。可以在任何粒度级别做出该指定。例如,什么启用存储器中的指定可以至少在以下粒度级别做出:
[0045].整个数据库
[0046].指定的表
[0047].指定的列
[0048].指定的行范围
[0049].指定的分区
[0050].指定的段
[0051]?指定的扩展区(extent)
[0052].或其任意组合(例如指定的列和分区)
[0053]如将在下文中进行描述的,启用存储器中的数据被转换成镜像格式并且在易失性存储器中存储为MF数据104。因此,当查询需要启用存储器中的数据时,数据库服务器具有从PF数据112或者从MF数据104中任一个提供数据的选项。转换和加载可以在数据库启动的时间发生,或者以懒惰或按需的方式发生。没有处于启用存储器中的数据没有在MF数据104中被镜像。因此,当查询需要这种数据时,数据库服务器不具有从MF数据104中获取该数据的选项。
[0054]为了解释的目的,将假定PF数据结构108包括在图2A中所示的表200。表200包括三个列cl-c3和六个行rl-r6。虽然在图2A中示出的表200描绘了数据逻辑上如何被组织在持久性存储装置110中,但是其中数据被物理上存储的实际格式可能是完全不同的。
[0055]具体而言,参考图2B,它示出了驻留在表200中的数据如何可以被物理上组织在持久性存储装置110中。在本例子中,用于表200的数据被存储在三个行为主的盘块202、204和206中。块202存储用于行rl的所有列的值,接着用于行r2的所有列的值。块204存储用于行r3的所有列的值,接着行r4的所有列的值。最后,块206存储行r5的所有列的值,接着行r6的所有列的值。
[0056]那些盘块中的一些盘块的拷贝可以被临时存储在高速缓存106中。在图2B所示的例子中,块204的高速缓存拷贝212驻留在高速缓存106中。高速缓存106可以利用各种高速缓存管理技术中的任何一种技术来管理,并且本文描述的实施例不限于任何特定的高速缓存管理技术。一般而言,这些技术试图在易失性存储器102中保留最有可能在不久的将来被请求的盘块的拷贝。因此,当高速缓存106用完空间时,较不可能被请求的盘块的高速缓存拷贝被更可能被请求的块的拷贝替换。
[0057]与高速缓存106中的数据相比,镜像格式数据104没有以基于持久性格式的方式被格式化。在图不的例子中,镜像格式数据104包括两个列向量220和222。每个列向量存储来自表200的单个列的连续的一系列值。在本例子中,列向量220存储来自表200的列I的值,并且列向量222存储来自表300的列3的值。在这个例子中,MF数据104镜像PF数据的子集,因为MF数据104不包括用于表200的列2的列向量。
[0058]MF数据的组织
[0059]根据一种实施例,即使MF数据使用与PF数据不同的格式,MF数据也以对应于PF数据组织的方式进行组织。例如,在持久性存储装置110中,PF数据可以被存储在驻留在扩展区中的块中,其中扩展区又被组织成段。在这些情况下,在易失性存储器102内,MF数据104可以基于数据所属的扩展区和/或段进行组织。因此,列向量220可以被划分成向量部分,其中每个部分对应于扩展区和/或段的特定范围。
[0060]在扩展区内,数据通常按rowid进行排序。类似地,在一种实施例中,MF数据104基于rowid进行排序。例如,在列向量220中的值基于用来排序块202、204和206中的PF数据的同一rowid进行排序。具体而言,rowid rl紧挨着在rowid r2之前,因此rlcl在列向量220中紧挨着在r2cl之前,并且rlcl至rlc3在块202中紧挨着在r2cl至r2c3之前。
[0061 ] 在可替代实施例中,MF数据104中的数据项的一些或全部没有在MF数据104内按rowid排序。以不同的顺序存储数据项会是有用的,例如,如果不同的排序产生显著更好的压缩。作为另一个例子,列向量可以最初按rowid进行排序。但是,当新的更新被“合并到”列向量中时(如将在后面更详细讨论的),更新的值可以附
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1