用于通过压缩和纵列存储进行自动数据放置的技术的制作方法

文档序号:6495920阅读:194来源:国知局
用于通过压缩和纵列存储进行自动数据放置的技术的制作方法
【专利摘要】对于数据库数据的自动数据放置,保持多项访问跟踪数据。所述多项访问跟踪数据分别对应于由数据库服务器管理的多个数据行。当数据库服务器正在正常执行时,自动确定被存储在一个或多个第一数据块中的一个数据行近期是否被访问过,这是根据对应于该数据行的访问跟踪数据而实现的。在确定该数据行近期被访问过之后,把该数据行从一个或多个第一数据块中自动移动到一个或多个热数据块,所述一个或多个热数据块被指定来存储所述多个数据行当中的近期被访问过的那些数据行。
【专利说明】用于通过压缩和纵列存储进行自动数据放置的技术
[0001]相关申请的交叉引用
[0002]本申请要求由Amit Ganesh等人在2011年5月19日提交的序列号为61/488,125的美国临时申请的优先权,其标题为“TECHINQUES FOR AUTOMATIC DATA PLACEMENT WITHCOMPRESSION AND COLUMNAR STORAGE”,并且通过引用的方式将其全部内容合并在此,正如在这里对其进行了全面阐述那样。
[0003]本申请涉及由Vineet Marwah等人在2010年8月30日提交的序列号为12/871,824 的美国申请,其标题为 “QUERY AND EXADATA SUPPORT FOR HYBRID C0MLUMNARCOMPRESSED DATA”,并且通过引用的方式将其全部内容合并在此,正如在这里对其进行了全面阐述那样。
【技术领域】
[0004]本发明涉及数据库系统中的数据管理。
【背景技术】
[0005]在本节中所描述的方法是可以采取的方法,但不一定是先前已被设想到或采取的方法。因此,除非另行声明,否则不应当仅仅根据其被包括在本节中而认为在本节中所描述的任何方法有资格作为现有技术。
[0006]关系和对象-关系数据库中的数据在逻辑方面被组织在数据库对象(其有时也被称作“方案对象”)中,其中可以包括(但不限于)表、视图、序列、所存储的过程、索引、簇以及去到其他数据库的数据库链接。在物理方面,这样的数据库的数据以数据单位的形式被存储在永久性存储设备中,该数据单位(有时也被称作“数据块”)被配置成存储特定数目的数据字节;在各个实施例和实现方式中,这样的数据单位可以在物理方面作为未处理块被直接存储在永久性存储设备上,或者可以被存储在文件中并且所述文件被存储在永久性存储设备上。举例来说,关系表的数据可以在逻辑方面被组织在记录中,其中每一条记录包括一个或多个字段,所述字段用于存储来自对于所述表所配置的相应的一个或多个列的数据值。在物理方面,每一条数据记录中的数据值可以被作为一个数据行被存储在一个或多个数据块中,所述数据块被存储在例如硬盘之类的永久性存储设备上的一个文件中。
[0007]通常来说,用户和应用通过使用参考存储所请求数据的数据库对象的查询和请求来访问关系和对象-关系数据库的数据。举例来说,用户或应用可以向数据库服务器发送查询,其中所述查询指定一项或多项操作以及存储将对其施行所述操作的数据的一个或多个关系表。响应于所述查询,数据库服务器确定具有所请求数据的数据行被物理地存储在其中的(多个)数据块,把这些(多个)数据块从永久性存储设备拷贝到易失性存储器的缓冲高速缓存中(如果这些(多个)数据块尚未处于缓冲高速缓存中的话),并且对于被存储在缓冲高速缓存中的(多个)数据块的拷贝中的数据行施行在所述查询中指定的操作。数据库服务器可以使用各种存储器管理机制把任何经过修改的(其也被称作“脏”的)数据块从缓冲高速缓存冲刷到永久性存储设备,从而释放空间以用于需要被读取到缓冲高速缓存中的其他数据块。
[0008]被用来存储数据库数据的大多数永久性存储设备(比如光盘或电磁盘)通常通过使用块级操作来进行操作,其以尺寸大于一个字节或者甚至几个字节的块来读取及写入数据。举例来说,典型的硬盘以8K字节的盘块来读取及写入数据;一些类型的硬盘可以使用其他块尺寸,比如16K和64K。为了利用此类硬盘的块级操作,数据库服务器通常提供其尺寸与所述硬盘所使用的盘块尺寸相同或者是盘块尺寸的某一倍数的数据块。此外,为了提供从/向硬盘的更快数据读取和数据写入,数据库服务器把每一个数据块作为一个完整单位在硬盘与易失性存储器中的缓冲高速缓存之间进行拷贝。不幸的是,使用这种方法来配置及管理数据块的数据库服务器可能会遇到几个问题。
[0009]其中一个此类问题是缓冲高速缓存利用率过低和数据库服务器的低效存储器使用。这是由于数据库服务器的大部分数据处理是在数据块级进行的,而对于缓冲高速缓存中的数据的实际访问则是在数据行级进行因此不是基于块进行的。举例来说,数据库服务器把整个数据块拷贝到易失性存储器中的缓冲高速缓存中,把整个数据块写回到永久性存储设备,并且在数据库服务器能够施行即时数据压缩的情况下压缩整个数据块。与此相对,大多数查询和应用访问是基于行的,也就是说查询和应用读取各个单独的数据行,更新各个单独的数据行,删除各个单独的行等等。因此,即使仅有给定数据块中的一个数据行被频繁访问而其余数据行则不常或者几乎从不被访问,数据库服务器也将必须把该数据块保存在缓冲高速缓存中以便提供对于所述被频繁访问的数据行的高效访问,尽管这对于该数据块中的其余数据行并不必要。这就导致缓冲高速缓存的利用率过低,并且实质上导致数据库服务器对于易失性存储器的低效使用。在其中数据库服务器可以被配置成使用刻意把单个数据行分散在几个数据块上以便改进写入速度的存储机制的操作情境中,前述问题更加恶化,因为这样会大大增加被频繁访问的数据行将与不常被访问的数据行混杂在相同数据块中的几率。
[0010]另一个问题在于,不容易对前面提到的用于配置和管理数据块的方法进行高效存储优化。这是因为在当前情况下,数据库服务器自动把数据行分配到数据块,而不为用户提供任何可配置的行级存储选项。举例来说,当前情况下,一些数据库服务器仅允许用户指定针对整个表的存储和压缩选项,而不允许用户在数据行的粒度或者甚至在数据块的粒度指定这样的选项。这样就阻碍了对此类数据库服务器进行优化以实现高效的数据块存储和/或压缩,即使当应用或用户(例如数据库管理员)可能具有足够的知识来确定给定表中的特定单独数据行在不久的将来不太可能被访问时也是如此。
【专利附图】

【附图说明】
[0011]在附图中通过举例而非限制的方式说明了这里所描述的技术,其中相同的附图标记指代类似的元件,并且其中:
[0012]图1是示出了根据一个实施例的用于自动数据放置的一种示例性方法的流程图;
[0013]图2是示出了根据一个实施例的示例性操作情境的方块图;
[0014]图3是示出了根据一个实施例的用于自动数据放置的另一种示例性方法的流程图;以及
[0015]图4是示出了可以在其上实施各个实施例的示例性计算设备的方块图。【具体实施方式】
[0016]在后面的描述中出于解释的目的阐述了许多具体细节,以便提供对于所描述的用于自动数据放置的技术的透彻理解。但是应当认识到,可以在没有这些具体细节的情况下实践这里所描述的技术。此外,用方块图的形式示出了众所周知的结构和设备,以避免不必要地模糊这里所描述的技术。
[0017]一般性总览
[0018]这里描述了用于数据库数据的自动数据放置的技术。基于表明数据库数据是否在数据行级近期或频繁被访问的因素,数据库服务器或相关联的组件被配置成在指定的数据块中自动移动及存储各个单独的数据行。在一些示例性实施例中,这里所描述的技术提出:基于表明每一个单独的数据行近期何时被访问的访问跟踪数据自动选择哪些数据行应当被移动;基于(可能可配置的)各种规则和/或策略自动确定所选数据行应当被移动到哪些数据块;以及在数据库服务器正常执行的同时在背景中把所选数据行自动移动到所确定的数据块,而不会对数据库服务器正在执行的进行中的操作和事务造成负面影响。按照这种方式,这里所描述的技术提供了更好的缓冲高速缓存利用率和更高效的存储器使用,这是因为被拷贝到缓冲高速缓存中的数据块更有可能存储更高百分比的近期和/或更加频繁地被访问的数据行。
[0019]根据这里所描述技术,把近期和/或频繁被访问的数据行与近期未被访问的数据块分开,并且将其存储在不同的数据块中。举例来说,这里所描述的技术提出:自动确定哪些数据行近期被访问,并且把这些数据行自动移动到被指定来存储近期和/或频繁被访问的数据行的热数据块。类似地,这里所描述的技术提出:自动确定哪些数据行近期未被访问,并且把这些数据行自动移动到被指定来存储近期未被访问的数据行的冷数据块;在其中数据库服务器提供数据压缩的实施例中,可以通过使用各种压缩机制进一步压缩冷数据块,这是根据对于存储在这些数据块中的数据行的访问频率而实现的。按照这种方式,这里所描述的技术允许配置各种策略和规则,从而同时为被频繁访问的热数据行并且为不常被访问的冷数据行提供高效的存储选项。
[0020]在一些实施例中,这里所描述的技术提出:将数据行自动放置在具有不同成本和/或性能特性的不同类型的存储装置上。例如根据对于各个单独数据行的访问模式,被非常频繁地访问的一些数据行可以被自动放置在存储于非常快速的永久性存储设备上的热数据块中,而不常被访问的其他数据行则可以被自动被放置在存储于较慢和/或较便宜的永久性存储设备上的冷数据块中。按照这种方式,这里所描述的技术在数据行的更细粒度下利用存储性能与存储容量之间的折中。这样就允许一个数据放置连续体(continuum),其中可以把最少被访问的数据行移动到指定的冷数据块并且可以在高容量/较慢存储设备上通过各种压缩机制对其进一步进行压缩,而更加频繁地被访问的数据行则可以被移动到存储在更快的存储设备上的指定的热数据块。
[0021 ] 在各个实施例中,这里所描述的技术可以被实施为由一个或多个计算设备施行的一种或多种方法,具有存储在一项或多项计算机可读存储介质上的可执行指令序列的形式的计算机程序产品,以及/或者被配置成施行这里所描述的技术的一个或多个计算机系统。[0022]示例性实施例的功能描述
[0023]图1是示出了根据这里所描述技术的用于自动数据放置的一种示例性方法的流程图。
[0024]在一些实施例中,图1中所示的方法的各个步骤由在一个或多个计算设备上执行的数据库服务器施行。这里所使用的“服务器”指的是一个或多个软件组件,其在被执行时可以被分配计算资源,比如存储器、CPU时间和/或盘存储空间,以便施行一项或多项功能。“数据库服务器”指的是适于对一个或多个数据库施行各项功能的服务器,所述数据库可以包括(但不限于)关系数据库、对象数据库、对象-关系数据库、各种类型的XML数据储存库及其任意组合。举例来说,通过利用为其分配的资源,数据库服务器可以被配置成施行各项数据管理功能(其中包括(但不限于)控制和促进对于特定数据库的访问,处理客户端访问特定数据库的请求,以及处理涉及在特定数据库中添加、删除和/或修改数据的客户端发起的操作和事务)以及数据库管理功能(其中包括(但不限于)创建数据库和表,为数据库和表分配盘空间,管理被分配给数据库和与数据库有关的处理的存储器缓冲器和其他易失性存储器,以及/或者创建和保持用户登录信息、角色信息和安全性策略信息)。在集群操作环境中,数据库服务器可以是作为一个数据库服务器集群的一部分操作的一个服务器实例,其中所述数据库服务器集群适于对一个或多个数据库施行数据管理功能和数据库管理功能。在一些实施例中,图1中所示的方法的各个步骤可以由除了数据库服务器之外的其他计算机处理实体施行,其中包括(但不限于)背景处理或线程、守护处理以及可以在没有直接用户控制的情况下自动运行的任何其他类型的系统服务或服务器。
[0025]后面把图1中示出的方法描述为由数据库服务器或者其一个或多个相关联的组件施行。但是应当提到的是,这一描述仅仅是出于说明性目的,因为图1的方法不限于由任何特定类型的计算机处理实体或服务来施行。
[0026]在步骤102中,数据库服务器和/或其组件存储并且连续地保持多项访问跟踪数据,所述多项访问跟踪数据分别对应于由数据库服务器管理的多个数据行。这里所使用的“数据行”指的是被配置成存储对应于例如表、索引或物化视图之类的数据库对象的一个或多个列的一个或多个数值的存储结构。例如在名称为“ ID”、“first_name (名)”和“ last_name (姓)”的三列中存储雇员数据的数据库表中,一个特定数据行可以存储对应于特定雇员的雇员ID、名和姓的数值。(应当提到的是,除了存储对应于各个数据库对象列的数值之夕卜,在一些实现方式中,一个数据行还可以包括对应于被自动添加到基础数据库对象并且由数据库服务器保持的一个或多个附加的隐藏、系统和/或伪列的数值。)这里所使用的“访问跟踪数据”指的是与一个特定数据行相关联的一个或多个数值的集合,其表明该特定数据行近期(多次)被访问的时间。
[0027]当数据库服务器在正常操作模式下执行时,在步骤104中,数据库服务器或其组件自动选择被存储在一个或多个数据块中的一个特定数据行以便根据这里所描述的技术进行处理。(应当提到的是,这里所使用的“自动”和“自动地”意味着所提到的功能由计算机在不接收并且不响应于来自用户的输入的情况下施行。)
[0028]“数据块”指的是被分配来存储来自一个或多个数据行和/或其一些部分的数据字节的存储空间的原子单位(比如数据结构)。通常来说,数据库服务器被配置成以不小于数据块的单位从永久性存储装置和易失性存储器读取和写入各组数据行。当需要取回来自一个数据块的一个数据行时,整个数据块被读取到由数据库服务器使用来临时存储数据块的存储器中缓冲高速缓存中。在一些实施例中,对应于给定数据库的各个数据块可以都具有在创建该数据库时配置的共同固定尺寸。在其他实施例中,对应于给定数据库的各个数据块可以具有可变尺寸。取决于存储在数据行中的数据值的数目和数据类型,一个特定数据块可以存储来自单个数据行的数据值,或者可以存储来自多个数据行的数据值,其中所述多个数据行可以在逻辑方面属于相同的数据库对象或者属于多个不同的数据库对象。在各个数据库服务器实施例和实现方式中,存储给定数据库的数据的各个数据块可以在逻辑方面被组织在各种存储空间结构(例如区间、分段、表空间等等)中,并且可以在物理方面被分配为未处理硬盘块或者操作系统(OS )数据文件的各个部分。
[0029]关于图1中的步骤104,这里所描述的用于自动数据放置的技术不限于选择哪些数据行将被自动处理的任何特定机制。举例来说,在一些实施例中,数据库服务器或其组件可以被配置成监测并自动处理被从永久性存储设备拷贝到易失性存储器中的缓冲高速缓存中的所有数据块中的数据行。在其他实施例中,数据库服务器或其组件可以基于各种规则或策略被配置成监测并且自动处理被拷贝到缓冲高速缓存中的一些(而非所有)数据块中的数据行,举例来说,数据库服务器可以被配置成仅仅处理未被钉在缓冲高速缓存中的那些数据块或者存储对应于一个指定数据库对象集合的数据的那些数据块的数据行。
[0030]在选择了用于自动数据放置的一个数据行之后,在步骤106中,数据库服务器或其组件根据对应于所选数据行的访问跟踪数据自动确定该数据行近期是否被访问过。举例来说,数据库服务器或其组件可以访问对应于所选数据行的访问跟踪数据中的一个或多个时间值,可以把所述一个或多个时间值与一些静态的或者动态可配置的(多个)阈值参数进行比较,并且可以基于所述比较确定所选数据行近期是否被访问过。在步骤108中,数据库服务器或其组件确定所选数据行近期被访问过。
[0031]在步骤110中,数据库服务器或其组件从所选数据行当前被存储在其中的一个或多个数据块中自动移除所选数据行,并且把所选数据行自动存储在一个或多个热数据块中。这里所使用的“热”数据块指的是被指定来存储近期被访问过的数据行的数据块。在步骤112中,数据库服务器或其组件继续通过施行步骤104到110来选择及处理其他数据行,同时如步骤102中所示继续保持对应于所述多个数据行的访问跟踪数据。
[0032]根据这里所描述技术,把数据行从其(多个)当前数据块移动到其在(多个)不同数据块中的新位置的移动操作的实施方式不会影响数据库服务器的正常操作以及可能正在其中执行的任何进行中的操作和事务。举例来说,在一些实施例中,数据库服务器或其组件可以基于数据库服务器的各种性能参数自动决定何时对于一个或多个所选数据行施行此类移动操作,所述性能参数比如有当前CPU利用率、进行中的事务数目、当前数据库连接的数目等等。
[0033]在一些实施例中,在步骤106中,数据库服务器或其组件还可以被配置成自动确定所选数据行近期是否未被访问过。举例来说,根据对应于所选数据行的访问跟踪数据中的一个或多个时间值,数据库服务器或其组件可以确定所选数据行近期未被访问过。随后数据库服务器或其组件从所选数据行当前被存储在其中的一个或多个数据块中自动移除所选数据行,并且把所选数据行自动存储在一个或多个冷数据块中。这里所使用的“冷”数据块指的是被指定来存储近期未被访问过的数据行的数据块。因此,在这些实施例中,这里所描述的技术允许数据库服务器把近期被访问过的行存储在热数据块中,并且把近期未被访问过的数据行存储在冷数据块中,从而使得其中冷、热数据行混杂的数据块的数目最小化。
[0034]特定于行的访问跟踪数据
[0035]根据这里所描述技术,使用特定于行的访问跟踪数据来确定各个单独的数据行近期是否被访问过。在一些实施例中,对应于一个单独数据行的访问跟踪数据是表明该特定数据行和/或该特定数据行所属的数据库对象最近一次或更多次被访问的时间的一个或多个数值的集合。这里所使用的“访问”和“被访问”指的是包括读取操作、修改操作和创建操作在内的操作。举例来说,一个特定数据行最近一次被访问的时间可以是指以下操作当中的一项或多项被施行的时间:生成该特定数据行的创建操作;从该特定数据行中读取至少一个数值的读取操作;以及/或者修改该特定数据行中的至少一个数值或某项其他参数的修改操作。
[0036]根据这里所描述技术,数据库服务器可以被配置成把各种类型的访问跟踪数据保持在各个存储位置处。举例来说,在一些实施例中,对应于一个数据行的访问跟踪数据可以包括一个标志,其被数据库服务器自动保持,并且在被设定时表明该数据行在一个预定时间段内被“接触”或访问过。在一些实施例中,对应于一个数据行的访问跟踪数据可以包括一个或多个时间值,其表明该数据行最近一次或更多次被访问的时间。在一些实施例中,对应于一个数据行的访问跟踪数据可以包括一个或多个时间标记或其他数值,数据库服务器可以从中导出该数据行最近一次或更多次被访问的时间。因此,这里所描述的技术不限于可以被用作访问跟踪数据以确定一个单独数据行近期是否被访问过的任何特定类型的数值。
[0037]在一些实施例中,对应于每一个特定数据行的访问跟踪数据可以被存储在该特定数据行内。举例来说,在一些实现方式中,数据库服务器可以向存储对应于给定数据库对象(例如一个表)的数据的所有数据行自动添加一个伪列,并且随后可以使用每一个特定数据行中的该伪列来连续更新对应于该特定数据行的访问跟踪数据。在一些其他实现方式中,取代向各个数据行添加伪列,数据库服务器可以使用已经存在于数据行中并且被数据库服务器用于某些其他维护目的的系统和/或隐藏列。举例来说,在这些实现方式中,数据库服务器可以把系统改变号用作访问跟踪数据,所述系统改变号被存储在特定数据行的系统列中并且标识出最后一次修改该特定数据行的事务,其中数据库服务器可以使用系统功能以把所述系统改变号转换成一个时间值或时间标记值。在使用行报头的另一些其他实现方式中,数据库服务器可以在特定数据行的行报头内存储并连续更新对应于该特定数据行的访问跟踪数据。
[0038]在一些实施例中,对应于每一个特定数据行的访问跟踪数据可以被存储在该特定数据行或其一部分被存储在其中的(多个)数据块的(多个)块报头中。给定数据块的报头存储关于被存储在该数据块中的各个数据行(或其一些部分)的元数据信息(例如行ID、块内的行偏移量等等),其中数据库服务器或其组件可以使用该元数据信息来管理及访问该数据块内的各个数据行。举例来说,数据库服务器可以在特定数据块的报头内存储并且连续更新对应于被存储在该特定数据块中的每一个单独数据行(或其一部分)的单独的访问跟踪数据。在一些其他实施例中,数据库服务器可以在系统范围储存库中存储并且连续更新对应于存储由该数据库服务器管理的一个或多个数据库的数据的所有数据行或者其中所标识出的某一子集的访问跟踪数据。在另一些其他实施例中,对应于每一个特定数据行的访问跟踪数据可以被访问一个特定数据行集合(例如存储对应于一个特定表的数据的各个数据行)的客户端或应用提供到数据库服务器,其中数据库服务器可以保持并使用所提供的访问跟踪数据来评估确定一个给定数据行应当被分类为热(例如最近被访问过)还是冷(例如最近未被访问过)的一条或多条策略或规则。
[0039]这里所描述的用于自动数据放置的技术是基于对应于每一个单独数据行的访问模式。根 据这些技术,数据库服务器或者与之相关联的组件被配置成把各个单独的数据行分类为热或冷,并且相应地把各个单独的数据行移动到热数据块或冷数据块。这一分类决定是当数据库服务器正在正常操作模式下执行时所施行的一项进行中的处理,并且不会对数据库服务器可能正在执行的任何进行中的操作和事务造成负面影响。虽然一些实施例可以提供能够作为数据行分类的基础的静态的或者动态可配置的参数或策略,但是数据库服务器自动做出所有以下决定:哪些数据行被分类为热和冷,应当把所分类的数据行移动到哪些数据块,应当如何移动所分类的数据行,以及应当何时移动所分类的数据行。
[0040]根据这里所描述技术,可以被用来把数据行分类为热或冷的对应于给定数据行的访问跟踪数据中的各个数值可以包括(但不限于)以下各项当中的一项或多项:
[0041]?对应于该数据行的最后读取时间,其表明该数据行最后一次被读取的时间;
[0042]?对应于该数据行的最后修改时间,其表明该数据行最后一次被更新或者以其他方式被修改的时间,并且在一些实施例中可以被初始地设定到该数据行最初被创建并且被分配到缓冲高速缓存中的一个数据块的时间;
[0043]?对应于存储该数据行的表、分段和/或分区的(多个)最后访问时间,其表明所述表、分段和/或分区(但不一定是该数据行)最后一次被访问的时间;
[0044]?对应于存储该数据行的表、分段和/或分区的(多个)最后修改时间,其表明所述表、分段和/或分区(但不一定是该数据行)最后一次被修改的时间;
[0045]?由访问该数据行的应用或客户端所指定的一项或更多参数值,其中所述一项或多项参数值可以与在数据库服务器处配置的一条策略的各项参数相关联,并且所述应用或客户端可以包括能够设定所述一项或多项参数值的精密逻辑,从而在数据库服务器对于该数据行评估所述策略时影响到该数据行被分类为热还是冷。
[0046]根据这里所描述技术,作为对应于给定数据行的访问跟踪数据所保持的各个数值可以被数据库服务器单独地和/或组合地使用来确定将该数据行分类为热还是冷。举例来说,如果数据库服务器确定所述数据行在一个特定阈值时间段(例如先前的5秒、I分钟、3分钟等等)内被最后一个访问,则数据库服务器将把该数据行分类为热;否则数据库服务器将把该数据行分类为冷。在另一个实例中,如果数据库服务器确定所述数据行在某一阈值时间段内被最后一次访问或者如果存储该数据行的分区在某一阈值时间段内被访问过,则数据库服务器将把该数据行分类为热;否则数据库服务器将把该数据行分类为冷。在该例中,当表级、分段级和/或分区级参数被用来把数据行分类为热或冷时,这样的参数可以与不同的阈值相关联,所述不同阈值可以被数据库服务器保持在一条或多条策略中。
[0047]示例性自动数据放置操作
[0048]这里所描述的用于自动数据放置的技术提出:基于数据行近期何时被访问和/或被访问的频率,把数据行从其当前被存储的数据块的自动重新分配到不同的数据块。包括在这样的自动数据放置中的操作涉及在后台重新分配数据行,与此同时管理数据行所属的数据库的数据库服务器在正常操作模式下执行。
[0049]这里所使用的“正常操作模式”指的是其中数据库服务器施行数据事务和操作的正常处理的执行模式,所述操作包括(但不限于)在线事务处理(OLTP)操作、在线分析处理(OLAP)操作以及可以由数据库服务器本身通过用户接口发起或者由访问数据库服务器所管理的数据的客户端和应用发起的任何其他操作。根据这里所描述技术,正由数据库服务器在正常操作模式下执行的任何此类事务和操作都不会受到将数据行重新分配在热数据块或冷数据块中的自动数据放置操作的负面冲击或影响。举例来说,在把数据行移动到不同的数据块时,由数据库服务器处理的查询和请求(例如选择、插入、更新、删除查询,以及来自例如检查点处理和各种日志写入器之类的各种数据库服务器处理或线程的任何调用和请求)不会被刻意减速、锁定或者以其他方式受到负面影响。在一些实施例中,根据这里所描述技术,将数据行重新分配在热数据块或冷数据块中的自动数据放置操作不是作为由数据库服务器响应于查询和请求而执行的任何事务和操作的一部分(或者响应于所述事务和操作)而执行的,其中所述查询和请求是来自访问由数据库服务器管理的数据的用户、客户端和应用。
[0050]为了最小化或彻底避免对于由数据库服务器施行的正常处理的任何负面影响,这里所描述的技术提出在后台自动做出以下决定:将要选择移动哪些数据行,所选数据行应当被移动到哪些数据块,数据行应当如何被移动,以及数据行应当何时被移动。对于被移动到不同的数据块的每一个数据行确定这些自动决定(哪些、何处、如何以及何时)。
[0051]根据这里所描述技术,这些自动决定由数据库服务器或其组件在运行时间动态地做出。根据对于数据行的使用模式以及数据行受到访问的频繁程度,数据库服务器或其组件可以被配置成在连续的或周期性的基础上把数据行分类为热或冷(比如在后台连续地进行,或者每分钟、每小时、每天进行等等)。因此,由数据库服务器指派给某一数据行的分类可以随着时间改变。
[0052]举例来说,假设一个数据行集合反映出用户在一个在线订单系统中所下的订单。在处理订单的同时,表示所述订单的数据行(其被存储在由数据库服务器管理的一个或多个关系表中)可能为热,这是因为其将被应对订单处理的前端客户端或应用频繁地访问和修改。最终,当订单被装运时,反映订单的数据行将变冷。虽然此后可能会为了某些报告偶尔访问所述数据行,但是最终任何应用或用户都将对所述订单失去兴趣,因此表示所述订单的数据行将变冷,并且可以被压缩并归档在便宜的永久性存储装置上。因此,当订单仍然活跃时,数据库服务器可以把表示所述订单的数据行分类为热,并且可以把这些数据行保持在存储于更快的存储装置(优选地存储于存储器缓冲高速缓存中)中的数据块中,以便改进对于这些数据行的访问性能。但是在几小时或几天之内,当对于订单数据的兴趣或需求减退时,数据库服务器可以把表示所述订单的数据行分类为冷,并且可以将其存储在冷数据块中并且可以在更便宜的存储装置上进一步压缩和/或归档。
[0053]应当提到的是,在某些操作情境中,在管理数据的用户(例如数据库管理员)没有察觉的情况下,热数据行可能会变冷并且冷数据块可能会变热。举例来说,如果正在公司中进行审计,则可能在没有通知数据库管理员的情况下由审计团队访问3-5年以前的记录。此外在这种情况下,3-5年以前的先前为冷的记录可能会变热,并且可能需要被保持几周,直到审计团队完成其工作为止。根据这里所描述技术,在这些操作情境中,存储对应于所述3-5年以前的记录的数据的数据行将被自动重新分类为热并且将被移动到热数据块,从而将确保对于这些数据行的访问导致数据库服务器的更加高效的存储器利用。这是因为,基于反映出每一个数据行近期何时被访问的访问跟踪数据,数据库服务器为每一个数据行自动做出所述关于哪些、何处、如何以及何时的决定。与此相对,利用传统数据管理机制的数据库服务器不允许用户在数据行的粒度或者甚至不允许在数据块的粒度指定存储选项,因此当先前为冷的数据行被访问时,数据库管理员将不具有信息或正确的标准来通过数据库服务器配置更加高效的存储器利用。
[0054]关于将要移动哪些数据行的自动决定
[0055]根据这里所描述技术,由数据库服务器基于与各个单独的数据行相关联的访问跟踪数据施行关于把哪些数据行分类为热或冷的自动决定。举例来说,数据库服务器或其组件可以访问对应于给定数据行的访问跟踪数据中的一个或多个时间值,可以把所述一个或多个时间值与一个或多个阈值进行比较,并且可以基于所述比较确定该数据行近期是否被访问过,并且如果该数据行近期已被访问过,则数据库服务器可以决定需要把该数据行存储在被指定来存储近期被访问过的数据行的热数据块中。
[0056]按照类似的方式,数据库服务器可以使用相同的或不同的阈值来决定需要把给定数据行存储在被指定来存储近期未被访问过的数据行的冷数据块中。数据库服务器用来决定一个数据行是热还是冷的阈值可以被指定在为该数据库服务器所配置的一条或多条策略或规则中,或者可以被指定为一项或多项静态的或者动态可配置的数据库服务器参数。在各个实施例和实现方式中,对于这样的阈值所配置的数值可以取决于具体操作情境或操作情形,并且可以被表示为绝对或相对日期和时间值(例如在先前的I分钟内、在先前的3分钟内、自从12:00am以来等等)。
[0057]关于将要把热数据行和冷数据行移动到何处的自动决定
[0058]根据这里所描述技术,数据库服务器自动决定将要把分类为热或冷的数据行移动到何处。举例来说,为了存储被分类为热的数据行,数据库服务器或其组件可以从多个可用热数据块当中自动选择一个热数据块。类似地,为了存储被分类为冷的数据行,数据库服务器或其组件可以从多个可用冷数据块当中自动选择一个冷数据块。数据库服务器可以保持表明哪些数据块被指定为热并且哪些数据块被指定为冷的元数据信息,其中在各个实施例中,数据库服务器可以把这样的元数据信息存储并保持在所述数据块本身内(例如作为每一个数据块报头中的一个标志或其他数值),或者将其存储并保持在一个集中式储存库匕如数据字典)中。
[0059]在一些实施例中,根据这里所描述技术,数据库服务器可以被配置成将新数据行自动存储在热数据块中。举例来说,响应于接收到需要被存储在一个数据库对象(例如一个表)中的新数据,数据库服务器或其组件可以选择一个或多个热数据块,并且可以把所述新数据作为一个或多个新数据行存储在所选择的(多个)热数据块中。
[0060]在一些实施例中,被指定来存储热数据行的数据块可以被组织在一个或多个热区段中,并且被指定来存储冷数据行的数据块可以被组织在一个或多个冷区段中。在这些实施例中,热区段中的数据块可以进一步被组织在一个分级结构中,其中不同的数据块子集被指定来存储根据不同访问模式被访问的数据行。类似地,冷区段中的数据块也可以被组织在一个分级结构中,其中不同的数据块子集被指定来存储根据不同访问模式被访问的数据行。这样的分级组织提高了将根据类似模式被访问的数据行存储在相同数据块中的几率,从而在数据库服务器需要访问存储在其中的数据时又确保了对于这些数据块被拷贝到其中的存储器缓冲高速缓存的更加高效的利用。
[0061]例如在一些实施例中,新的数据行将被放置在热区段中的数据块中,并且如果现有的冷数据行中的一个或多个数据值被更新,则该冷数据行将被重新分类为热,并且还将被移动到热区段中的数据块。在热区段内,任何新数据行将被局部化并且放置在热区段中的存储非常热的数据行的一个块子集中,而先前被分类为非常热的数据块的热度则将最终变得越来越低。这样将允许热区段中的数据块逐渐变得更冷,并且最终被移动到冷区段。因此,在这些实施例中,所述块分级结构可以被用来指定:用于存储很热数据行的数据块;存储一段时间以前曾经很热但是现在不再如此热的数据行的数据块;以及存储曾经为热但是现在可以被分类为冷的数据行的数据块,这意味着这些数据块可以重新被分类为属于冷区段。
[0062]在这些实施例中,对于被分类在冷区段中的数据块可以类似地使用一个分级结构。举例来说,这样的分级结构可以被用来指定存储对其进行访问的可能性不高但是仍然可能发生的冷数据行的数据块,以及存储预期完全不会对其进行访问的很冷数据行的数据块。因此,基于该分级结构,可以通过平衡压缩和解压缩性能的一种压缩机制来对存储冷数据行的数据块进行压缩,同时可以利用能够实现最大压缩的一种不同的压缩机制来对存储很冷数据行的数据块进行压缩。
[0063]关于如何移动热数据行和冷数据行的自动决定
[0064]根据这里所描述技术,数据库服务器自动决定如何移动已被分类为热或冷的数据行。举例来说,在一些实施例中,数据库服务器或其组件可以自动决定将要把给定数据行移动到何种类型的永久性存储设备,是否应当压缩将在其中存储该数据行的(多个)数据块,以及如果压缩适用的话则将以何种压缩水平对这些(多个)数据块进行压缩。在这些实施例中,数据库服务器或其组件可以基于各种系统范围、块级和/或行级参数自动做出此类决定,其中可以在一条或多条策略中对于数据库服务器配置所述参数。
[0065]在一些实施例中,数据库服务器可以基于由用户配置的参数和/或基于由访问该数据库服务器所管理的(多个)数据库的客户端或应用提供的参数自动决定如何移动已被分类为热或冷的数据行。举例来说,数据库客户端或数据库应用可以为数据库服务器提供反映出由该客户端或应用看到的数据行的状态的参数值,并且数据库服务器可以基于这些参数值自动决定如何移动特定数据行。这一功能在数据库服务器可能并不总是能够确定数据行的所有特性的操作情境中可能是有用的,因为这些特性当中的一部分可以由客户端或应用所使用的特定数据访问逻辑决定。举例来说,一些客户端或应用可能需要来自特定表的特定数据行总是存在于或者说被“钉”在存储器缓冲高速缓存中,尽管这些数据行可能不常被使用或访问。在另一个实例中,数据库应用可以能够确定其在可预见的将来都不会再访问来自特定表的特定数据行,并且可能希望将这些数据行立即归档。
[0066]关于何时移动热数据行和冷数据行的自动决定
[0067]根据这里所描述技术,数据库服务器自动决定何时移动已被分类为热或冷的数据行。在一些实施例中,数据库服务器或其组件可以自动决定何时移动特定数据行,这是基于估计此类移动将对数据库服务器的正常操作造成的影响而进行的。举例来说,在估计预期影响时,数据库服务器或其组件可以考虑由数据库服务器的用户所感知到的可能性能降低,这在数据库服务器被配置成主要施行涉及大计算量数据处理操作的OLAP处理的操作情境中可能是重要的。在另一个实例中,在估计把数据行移动到不同的数据块的预期影响时,数据库服务器或其组件可以考虑增加不同用户连接之间的锁定或死锁的可能性,这在数据库服务器被配置成主要施行涉及大量数据库事务的OLTP处理的操作情境中可能是重要的。
[0068]在不同的实施例和操作情境中,数据库服务器可以使用多种不同技术来决定何时把数据行重新分配到不同的数据块。举例来说,在一些实施例中,数据库服务器可以基于例如存储器利用率、CPU利用率、网络利用率、待定事务数目、数据库连接数目等当前参数来考虑总体系统负荷。附加地或替换地,在一些实施例中,数据库服务器可以考虑是要单独地逐行重新分配所选数据行还是要在不同大小的各个批次重新分配所选数据行以便减少与处理单独各行相关联的开销。
[0069]对于冷数据块的进一步压缩
[0070]在其中数据库服务器提供即时压缩的实施例中,数据库服务器可以使用各种压缩机制来进一步压缩被指定用于并且存储近期未被访问过的数据行的冷数据块。举例来说,根据对应于特定数据行或者对应于一个数据行集合(比如一个给定表中的数据行)的参数,数据库服务器可以自动决定通过从具有不同成本和性能量度的多种压缩机制当中选择的一种压缩机制来对冷数据块进行压缩,比如可以跨越从低压缩/高性能机制(其适于对在线查询中可能会需要的数据进行压缩)到高压缩/低性能机制(其适于对不太可能被访问的数据进行归档)的范围的各种压缩机制。
[0071]通过把冷数据行分离并存储在指定的冷数据块中,这里所描述的技术允许对于存储空间的更加高效的使用(这是因为将会提高冷数据块仅仅存储冷数据行的可能性)以及潜在地非常显著的性能增益(这是因为将会减少对于解压缩冷数据块的需求)。
[0072]自动数据放置操作的示例性实现方式
[0073]在各个实施例中,可以通过多种方式实施在这里所描述的自动数据放置中所涉及的操作。举例来说,在一些实施例中,可以由数据库服务器实例化一个单独的线程来施行重新分配每一个单独的数据行的移动操作(以及有关的自动决定)。在其他实施例中,数据库服务器或其组件可以实例化遍历所有数据行并且将这些数据行标记为热或冷的一个处理或线程,以及遍历所标记的各个数据行、决定何时、何处、如何移动所标记的数据行并且把所标记的数据行相应地实际移动到热数据块或冷数据块的一个不同的处理或线程。在各个实施例中,从中实例化这样的处理和/或线程的可执行代码可以被包括为数据库服务器或其组件(比如存储引擎)的可执行代码的一部分,或者可以被提供为能够对于数据库服务器配置并且由数据库服务器调用的外部附加模块。
[0074]关于一个示例性实施例的结构描述
[0075]图2是示出了根据一个示例性实施例的操作情境的方块图。一个或多个计算设备202被配置成执行数据库服务器210。数据库服务器210被配置成管理一个关系数据库(图2中未示出),并且实例化被用于在易失性存储器中存储包括来自该数据库的数据行的数据块的存储器缓冲高速缓存204。
[0076](多个)计算设备202在通信方面或者操作方面连接到一个或多个永久性存储设备220。(多个)永久性存储设备220被配置成把数据块存储在由(多个)计算设备202的操作系统(OS)管理的一个或多个数据文件中。所述数据块(比如数据块230、240、250和260)被配置成存储属于由数据库服务器210管理的数据库的一个或多个表的数据行。
[0077]在操作中,数据库服务器210被配置成从数据库客户端和数据库应用接收查询和请求,并且针对存储在数据块拷贝中的数据库数据处理这些查询和请求,其中所述数据块拷贝被存储在缓冲高速缓存204中。举例来说,响应于查询,数据库服务器210确定具有所请求数据的数据行被物理地存储在其中的(多个)数据块,把这些数据块当中的每一个作为一个整体块从(多个)永久性存储设备220拷贝到缓冲高速缓存204中(如果这些数据块尚未被存储在缓冲高速缓存中的话),并且对于被存储在缓冲高速缓存204中的(多个)数据块的拷贝中的数据行施行在所述查询中指定的操作。数据库服务器210或其组件可以使用各种存储器管理机制把任何“脏”数据块从缓冲高速缓存204冲刷到(多个)永久性存储设备220,以便为需要被读取到缓冲高速缓存中的其他数据块释放空间。(应当提到的是,数据库服务器210可以被配置成施行附加的数据管理功能和/或数据库管理功能;但是为了不模糊这里所描述的技术,在图2中没有讨论或示出这样的附加功能。)
[0078]根据这里所描述技术,数据库服务器210包括访问跟踪逻辑212和自动数据放置(ADP)逻辑214。这里所使用的“逻辑”指的是一个可执行指令集合,其在由一个或多个处理器执行时适于施行一项或多项功能。在各个实施例和实现方式中,任何此类逻辑可以被实施为可由一个或多个处理器执行的一个或多个软件组件,例如专用集成电路(ASIC)或其他可编程集成电路(IC)之类的一个或多个硬件组件,或者软件与硬件组件的任意组合。在图2中所示的示例性实施例中,访问跟踪逻辑212和ADP逻辑214被实施为作为数据库服务器210的一部分的一个或多个软件模块。
[0079]访问跟踪逻辑212被配置成存储并且持续地更新与存储在(多个)永久性存储设备220上的(多个)数据块中的每一个单独的数据行相关联的访问跟踪数据。
[0080]在图2所示的示例性实施例中,访问跟踪逻辑212被配置成利用一个系统数值来更新给定数据行中的一个伪列,所述系统数值可以被ADP逻辑214使用来导出该数据行最近一次被访问的时间。在该实施例中,数据行中的所述伪列可以充当被指定来存储一个或多个系统数值的行报头字段,所述系统数值可以被保持以特别用于实施这里所描述的用于自动数据放置的技术,或者可以出于其他原因而被保持。举例来说,当数据块230中的数据行231被更新时(在缓冲高速缓存204中的块拷贝中),访问跟踪逻辑212被配置成把一个系统数值自动存储在伪列231a中,其中所述系统数值可以被用来导出更新了数据行231的事务的标识符,从而允许ADP逻辑214确定数据行231被更新的时间。按照类似的方式,访问跟踪逻辑212可以持续地保持对应于存储在(多个)永久性存储设备220上的数据块中的每一个数据行的访问跟踪数据。
[0081]此外,访问跟踪逻辑212可以使用各种机制来跟踪表明对于一个数据行施行读取操作的时间的访问跟踪数据;例如每当从缓冲高速缓存204中的一个数据行读取一个数值时,访问跟踪逻辑212可以存储一个时间标记或其他指示,其中这样的时间标记或其他指示可以与该数据行一起存储或者被存储在集中式储存库中,并且可以直接或间接地表明对于该数据行施行读取操作的时间。
[0082]ADP逻辑214被配置成在数据库服务器210在正常操作模式下执行的同时根据这里所描述技术施行自动数据放置操作。为了最小化对于数据库服务器210的任何负面影响,ADP逻辑214被配置成在后台做出以下决定:将要选择移动哪些数据行,所选数据行应当被移动到哪些数据块,应当如何移动数据行,以及应当何时移动数据行。基于与任何给定数据行相关联的访问跟踪数据,ADP逻辑214被配置成在连续的或者周期性的基础上把该数据行分类为热或冷,并且根据关于应当在何处、如何以及何时移动数据行的决定对该数据行施行移动操作215。
[0083]移动操作215涉及从一个数据行当前被存储在其中的(多个)数据块中移除该数据行并且把该数据行存储在(多个)不同的数据块中,其中可以按照任意顺序施行这两项动作,前提是按照原子方式施行移动操作215以确保不会发生数据不一致和数据丢失的情况。举例来说,可以作为一项服务器发起的后台事务(连同保持例如重做日志在内的任何必要的日志)来施行一项或多项移动操作215,其与数据库服务器210在正常操作模式下可以响应于查询和请求而施行的任何事务和操作不同并且与之分开,其中所述查询和请求是来自访问由数据库服务器管理的数据的用户、客户端和应用。取决于具体操作情境,ADP逻辑214可以被配置成对于每一个数据行分开实施移动操作215,或者在不同大小的各个批次中对于多个数据行施行移动操作以便最小化处理开销和/或对于数据库服务器210的操作的影响。
[0084]在图2所示的操作实例中,数据块230存储数据行231-233并且数据块240存储数据行241-243,其中数据块中的白色区段表示自由空间,阴影区段表示存储数据的块空间。(应当提到的是,仅出于说明的目的,图2中所示的数据块中的数据行被显示为其中一个处于另一个的上方。但是在实际的实现方式中则不是这种情况,这是因为一个数据块通常被实施为顺序地存储具有不同长度的各个数据行的一个连续数据结构,其中每一个数据行在该数据块中的偏移量被保持在块报头中。)
[0085]在图2的操作实例中,ADP逻辑214把数据块250指定为用于存储近期被访问过的数据行的热数据块,并且把数据块260指定为用于存储近期未被访问过的数据行的冷数据块。ADP逻辑214可以通过在该数据块的报头中存储一个标志或某一个(多个)其他数据值来指定每一个数据块,其中所述标志或(多个)其他数据值表明该数据块的类型(例如热或冷)。根据这里所描述技术,ADP逻辑214遍历(多个)永久性存储设备220上的各个数据块(例如数据块230和240)中的一些或所有数据行,基于存储在该数据行中的访问跟踪数据把每一个数据行分类为热或冷,并且对于每一个数据行施行移动操作215以便把该数据行移动到(多个)热数据块或冷数据块。在施行移动操作215的过程中,ADP逻辑214跟踪与被移动的数据行相关的所有元数据信息(其中包括但不限于与从中移动该数据行的数据块及其任何缓冲高速缓存拷贝相关联的任何元数据信息,以及与该数据行被移动到的数据块及其任何缓冲高速缓存拷贝相关联的任何元数据信息),从而使得常规数据库服务器操作和事务不会受到影响。
[0086]举例来说,ADP逻辑214取回存储在数据块230中的数据行232的字段232a中的访问跟踪数据。基于所述访问跟踪数据,ADP逻辑214确定数据行232近期被访问过,并且将该数据行分类为热。ADP逻辑214随后决定数据行232应当被移动到热数据块250。随后,ADP逻辑214调用移动操作215,其把数据行232存储在热数据块250中并且把数据行232从数据块230中移除。类似地,基于存储在数据行233的字段233a中的访问跟踪数据,ADP逻辑214确定数据行233近期未被访问过,并且将该数据行分类为冷。ADP逻辑214随后决定数据行233应当被移动到冷数据块260。随后,ADP逻辑214调用移动操作215,其把数据行233存储在冷数据块260中并且把数据行233从数据块230中移除。(在数据行232和233分别被移动到数据块250和260之后,ADP逻辑214或数据库服务器210的另一个组件可以移动块230内的数据行231,以便把该块内的自由空间合并成一个连续组块。)
[0087]ADP逻辑214按照类似方式处理数据块240中的各个数据行。举例来说,ADP逻辑214取回存储在数据行241的字段241a中的访问跟踪数据。基于所述访问跟踪数据,ADP逻辑214确定数据行241近期被访问过,并且将该数据行分类为热。ADP逻辑214随后决定数据行241应当被移动到热数据块250。随后,ADP逻辑214调用移动操作215,其把数据行241存储在热数据块250中并且把数据行241从数据块240中移除。类似地,基于存储在数据行242的字段242a中的访问跟踪数据,ADP逻辑214确定数据行242近期被访问过,并且将该数据行分类为热。ADP逻辑214随后决定数据行242应当被移动到热数据块250。随后,ADP逻辑214调用移动操作215,其把数据行242存储在热数据块250中并且把数据行242从数据块240中移除。基于存储在数据行243的字段243a中的访问跟踪数据,ADP逻辑214确定数据行243近期未被访问过,并且将该数据行分类为冷。ADP逻辑214随后决定数据行243应当被移动到冷数据块260。随后,ADP逻辑214调用移动操作215,其把数据行243存储在冷数据块260中并且把数据行243从数据块240中移除。在数据行241-243当中的一个或多个个被移出数据块240之后,ADP逻辑214或数据库服务器210的另一个组件可以把该块内的自由空间合并成一个连续组块。
[0088]在某些操作情形中,ADP逻辑214还可以被配置成对冷数据块进行压缩。举例来说,ADP逻辑214可以被配置成基于针对存储在一个给定冷数据块中的数据行的访问模式为该数据块选择一种压缩机制,并且可以使用这种压缩机制来压缩该数据块并且以压缩形式将其保持在(多个)永久性存储设备220上;当ADP逻辑214需要把一个数据行移动到该数据块时,ADP逻辑214解压缩该数据块,把所述数据行存储在其中,并且随后在将其存储回到(多个)永久性存储设备上之前重新压缩该数据块。在另一个实例中,ADP逻辑214可以被配置成基于针对存储在一个给定冷数据块中的数据行的访问模式为该数据块选择一种压缩机制,并且可以在该数据块已满或者存储了至少一定阈值数量的数据之后使用这种压缩机制来压缩该数据块。取决于具体的存储和性能需求,在各种操作情形中,ADP逻辑214或数据库服务器210的另一个组件可以使用各种其他方法来压缩冷数据块,这是通过使用可以跨越低压缩/高性能机制到高压缩/低性能机制的范围的各种其他压缩机制而实现的。
[0089]对应于具有不同特性的存储设备的示例性实施例
[0090]图3是示出了根据这里所描述技术的用于自动数据放置的一种示例性方法的流程图。在一些实施例中,图3中所示的方法的各个步骤可以由在一个或多个计算设备上执行的数据库服务器施行,而在其他实施例中,所述方法的各个步骤可以由除了数据库服务器之外的其他计算机处理实体施行,其中包括(但不限于)后台处理或线程、守护处理以及可以在没有直接用户控制的情况下自动运行的任何其他类型的系统服务或服务器。[0091]后面把图3中示出的方法描述为由数据库服务器或者其一个或多个相关联的组件施行。但是应当提到的是,这一描述仅仅是出于说明性目的,因为图3的方法不限于由任何特定类型的计算机处理实体或服务来施行。
[0092]在步骤302中,数据库服务器和/或其组件存储并且连续地保持多项访问跟踪数据,所述多项访问跟踪数据分别对应于由数据库服务器管理的多个数据行。对应于每一个特定数据行的访问跟踪数据是表明该特定数据行最近一次(多次)被访问的时间的一个或多个数值的集合。
[0093]当数据库服务器在正常操作模式下执行时,在步骤304中,数据库服务器或其组件自动选择被存储在第一存储设备中的一个特定数据行以便根据这里所描述的技术进行处理。在各种实现方式中,该特定数据行可以按照多种格式被存储。在一个实例中,可以按照以行为主的格式把所述特定数据行存储在一个或多个数据块中,所述数据块在物理方面被分配为存储在第一存储设备上的一个或多个数据文件的一部分。以行为主的格式是其中来自同一数据行的不同列的数据值被一个接一个地存储为一个序列的格式。在另一个实例中,可以把所述特定数据行的一个或多个数据值存储在按照以列为主的格式被格式化的一个或多个相应的纵列数据集中。在以列为主的格式中,来自多个不同数据行(比如来自同一个表的一个数据行集合)中的同一单列的数据值被一个接一个地存储为一个序列。
[0094]在选择了用于自动数据放置的一个数据行之后,在步骤306中,数据库服务器或其组件根据对应于所选数据行的访问跟踪数据自动确定该数据行是否近期被访问过的热数据行。举例来说,数据库服务器或其组件可以访问对应于所选数据行的访问跟踪数据中的一个或多个时间值,可以把所述一个或多个时间值与一些静态的或者动态可配置的(多个)阈值参数进行比较,并且可以基于所述比较确定所选数据行近期是否被访问过。在步骤308中,数据库服务器或其组件确定所选数据行近期被访问过。
[0095]在步骤310中,数据库服务器或其组件从所选数据行当前被存储在其中的第一存储设备中自动移除所选数据行,并且把所选数据行自动存储在不同于第一存储设备的第二存储设备中。根据这里所描述的技术,第二存储设备可以是被指定来存储热数据的高性能存储设备。
[0096]在其中按照以行为主的格式把所选数据行存储在一个或多个数据块中的实现方式中,在步骤310中,数据库服务器或其组件可以施行移动操作,其把所选数据行从存储在第一存储设备上的(多个)数据块移动到存储在第二高性能存储设备上的(多个)数据块。
[0097]在其中按照以列为主的格式把所选数据行中的(多个)数据值存储在(多个)纵列数据集中的实现方式中,在步骤310中,数据库服务器或其组件可以首先从存储在第一存储设备上的(多个)纵列数据集中取回所选数据行,并且随后把所选数据行存储在被存储于第二高性能存储设备上的(多个)纵列数据集中。在这些实现方式中,从(多个)纵列数据集中取回一个数据行以及把一个数据行存储在(多个)纵列数据集中的操作通常涉及从所述存储设备取回所述(多个)纵列数据集,对所述(多个)纵列数据集进行拆包从而把存储在其中的各个数据值组装到各个整数据行中,并且随后在从中移除或者在其中存储了一个或多个数据行的各个数据值之后,将所述(多个)纵列数据集重新打包。因此,在其中按照以列为主的格式存储各个数据行的实施例中,这里所描述的技术提出把各个数据行成批或者分批从一个存储设备移动到另一个存储设备,其中被移动的各个数据行通常属于同一数据库对象(比如一个表),从而确保其存储对应于相同各列的数据值。
[0098]在步骤312中,数据库服务器或其组件继续通过施行步骤304到310来选择及处理其他数据行,同时如步骤302中所示继续保持对应于所述多个数据行的访问跟踪数据。
[0099]根据这里所描述技术,把一个数据行(或者一批数据行)从当前存储设备移动到不同的存储设备中的新位置的移动操作的实施方式不会对数据库服务器的正常操作以及可能正在其中执行的任何进行中的操作和事务造成负面影响。
[0100]在一些实施例中,在步骤306中,数据库服务器或其组件还可以被配置成自动确定所选数据行近期是否未被访问过。举例来说,根据对应于所选数据行的访问跟踪数据中的一个或多个时间值,数据库服务器或其组件可以确定所选数据行是近期未被访问过的冷数据行。随后,数据库服务器或其组件把所选冷数据行从该所选冷数据行当前被存储在其中的存储设备中自动移除,并且把所选冷数据行自动存储在被指定来存储近期未被访问过的冷数据行的高容量存储设备中。应当提到的是,可以按照以行为主或者以列为主的格式来存储所选冷数据行,并且在把冷数据行移动到不同的存储设备时所涉及的操作类似于前面对于移动具有以行为主或者以列为主的格式的热数据行所描述的操作。
[0101]按照这种方式,这里所描述的技术允许数据库服务器把近期被访问过的各行存储在高性能存储设备中,并且把近期未被访问过的数据行存储在高容量存储设备中,从而基于其成本、容量和/或性能特性对存储设备进行更加高效(在容量和性能方面)的使用。因此,这里所描述的技术在数据行的更细粒度下利用了存储性能与存储容量之间的折中。
[0102]在一些实施例中,图3中所示的示例性方法可以在被配置成存储由数据库服务器管理的一个或多个数据库的数据的存储系统中施行。
[0103]举例来说,在这些实施例中,一个或多个存储系统可以被配置成向数据库服务器提供数据存储,其中数据库服务器与存储系统通过网络连接。这样的网络的一个实例是Infiniband网络,其所包括的交换机具有提供数据服务器与存储系统之间的双向通信链路的接口。
[0104]在这些实施例中,存储系统可以是自主式计算设备,其硬件在物理方面不同于数据库服务器被配置成在其上执行的一个或多个计算设备的硬件。所述存储系统包括在操作方面和/或通信方面连接到一个或多个永久性存储设备(例如光盘、电磁盘)的存储服务器,其中所述存储服务器包括用于存储、取回、管理以及提供对于存储在(多个)永久性存储设备上的数据的访问的逻辑。所述存储系统还包括被配置成根据这里所描述的技术来施行自动数据放置操作的逻辑,其中这样的逻辑可以被包括为存储服务器的一部分,或者可以被提供为能够在存储系统中执行的(多个)单独的模块。
[0105]在操作中,数据库服务器可以被配置成向存储系统发送数据以便按照数据块或某种其他离散数据集的形式进行存储,并且存储系统中的存储服务器被配置成在(多个)永久性存储设备上以各种存储单位来存储数据。连同被发送到存储系统以进行存储的数据集,数据库服务器还可以发送对应于被表示在这些数据集中的每一个数据行的访问跟踪数据,其中所述访问跟踪数据被存储系统中的逻辑使用来根据这里所描述的技术促进对于相应数据行的自动数据放置,这例如是通过施行图3中所示的方法的各个步骤而实现的。
[0106]硬件总览
[0107]根据一个实施例,这里所描述的技术可以由一个或多个专用计算设备来实施。所述专用计算设备可以被硬连线来施行所述技术,或者可以包括数字电子设备,比如被永久性地编程来施行所述技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA),或者可以包括一个或多个通用硬件处理器,其被编程来施行根据固件、存储器、其他存储装置或其某种组合中的程序指令的技术。这样的专用计算设备还可以把定制硬连线逻辑、ASIC或FPGA与定制编程相组合以实现所述技术。所述专用计算设备可以是台式计算机系统、便携式计算机系统、网络基础设施设备或者合并有用以实施所述技术的硬连线和/或程序逻辑的任何其他设备。
[0108]举例来说,图4是示出了可以在其上实施这里所描述的技术的一个实施例的计算机系统400的方块图。计算机系统400包括总线402或者用于传送信息的其他通信机制,以及与总线402耦合以用于处理信息的硬件处理器404。硬件处理器404例如可以是通用微处理器。
[0109]计算机系统400还包括主存储器406,比如随机存取存储器(RAM)或其他动态存储设备,其耦合到总线402以用于存储将由处理器404执行的信息和指令。主存储器406还可以被用于在将由处理器404执行的指令的执行过程中存储临时变量或其他中间信息。这样的指令在被存储于可由处理器404访问的非暂态存储介质中时,令计算机系统400成为被定制来施行在所述指令中指定的操作的专用机器。
[0110]计算机系统400还包括只读存储器(R0M)408或其他静态存储设备,其耦合到总线402以便存储用于处理器404的静态信息和指令。例如磁盘或光盘之类的存储设备410被提供并耦合到总线402以用于存储信息和指令。
[0111]计算机系统400可以通过总线402耦合到显示器412,比如阴极射线管(CRT)或液晶显示器(IXD),以用于向计算机用户显示信息。包括字母数字和其他按键的输入设备414耦合到总线402以便向处理器404传送信息和命令选择。另一种类型的用户输入设备是光标控制器416,比如鼠标、轨迹球或光标方向键,其用于向处理器404传送方向信息和命令选择并且用于控制显示器412上的光标移动。该输入设备通常具有两个轴上的两个自由度,即第一轴(例如X)和第二轴(例如y),其允许所述设备指定一个平面内的位置。
[0112]计算机系统400可以实施这里所描述的用于自动数据放置的技术,这是通过使用定制的硬连线逻辑、一个或多个ASIC或FPGA、与计算机系统相组合地使得计算机系统400成为或者将计算机系统400编程为专用机器的固件和/或程序逻辑而实现的。根据一个实施例,这里的技术由计算机系统400响应于处理器404执行包含在主存储器406中的由一条或多条指令构成的一个或多个序列来施行。可以从例如存储设备410的另一存储介质把这样的指令读取到主存储器406中。通过执行包含在主存储器406中的指令序列使得处理器404施行这里所描述的处理步骤。在替换实施例中,可以使用硬连线电路以替代软件指令或者与软件指令相组合。
[0113]这里所使用的术语“存储介质”指的是存储使得机器按照特定方式操作的数据和/或指令的任何非易失性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质例如包括光盘或磁盘,比如存储设备410。易失性介质包括动态存储器,比如主存储器406。存储介质的常见形式例如包括软盘、柔性盘、硬盘、固态驱动器、磁带、或者任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、任何具有孔洞图案的物理介质、RAM、PROM、EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或卡盒。[0114]存储介质与传输介质不同,但是可以与传输介质相结合地使用。传输介质参与在存储介质之间传输信息。举例来说,传输介质包括同轴线缆、铜线和光纤,其中包括构成总线402的连线。传输介质还可以采取声波或光波的形式,比如在无线电波和红外数据通信期间所生成的那些波。
[0115]在向处理器404载送由一条或多条指令构成的一个或多个序列以供执行时可以涉及各种形式的介质。举例来说,所述指令可以最初被承载在远程计算机的磁盘或固态驱动器上。远程计算机可以把所述指令加载到其动态存储器中,并且利用调制解调器通过电话线发送所述指令。计算机系统400的本地调制解调器可以在电话线上接收所述数据,并且使用红外传送器将所述数据转换成红外信号。红外检测器可以接收在红外信号中载送的数据,并且适当的电路可以将所述数据放置在总线402上。总线402将所述数据载送到主存储器406,处理器404从该处取回并执行所述指令。在由处理器404执行之前或之后,由主存储器406接收的指令可以可选地被存储在存储设备410上。
[0116]计算机系统400还包括耦合到总线402的通信接口 418。通信接口 418提供去到网络链接420的双向数据通信耦合,网络链接420连接到本地网络422。举例来说,通信接口 418可以是综合服务数字网络(ISDN)卡、有线电视调制解调器、卫星调制解调器或者提供去到相应类型的电话线的数据通信连接的调制解调器。作为另一个实例,通信接口 418可以是用于提供去到相容的LAN的数据通信连接的局域网(LAN)卡。还可以实施无线链接。在任何此类实现方式中,通信接口 418发送并接收载送表示各种类型的信息的数字数据流的电信号、电磁信号或光学信号。
[0117]网络链接420通常通过一个或多个网络提供去到其他数据设备的数据通信。举例来说,网络链接420可以通过本地网络422提供去到主机计算机424或者去到由互联网服务提供商(ISP) 426运营的数据装备的连接。ISP426又通过现在常被称作“因特网”428的世界范围分组数据通信网络提供数据通信服务。本地网络422和因特网428都使用载送数字数据流的电信号、电磁信号或光学信号。向/从计算机系统400载送数字数据的经由各种网络的信号以及网络链接420上的并且经由通信接口 418的信号是传输介质的示例性形式。
[0118]计算机系统400可以通过(多个)网络、网络链接420和通信接口 418发送消息并且接收包括程序代码在内的数据。在因特网实例中,服务器430可以通过因特网428、ISP426、本地网络422和通信接口 418为应用程序传送所请求的代码。
[0119]所接收到的代码可以在被接收时由处理器404执行,并且/或者被存储在存储设备410或者其他非易失性存储装置中以供后来执行。
[0120]在前面的说明书中参照对于不同实现方式可以有所不同的许多具体细节描述了本发明的实施例。因此,说明书和附图应当被认为是说明性而非限制性的。关于本发明的范围并且是由 申请人:意图作为本发明的范围的唯一排他性指示是从本申请发布的并且具有所发布的具体形式的权利要求书的字面和等效范围,其中包括任何后续的修正。
【权利要求】
1.一种计算机实施的方法,其包括: 保持分别对应于由数据库服务器管理的多个数据行的多项访问跟踪数据; 当数据库服务器正在正常操作模式下执行时,施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第一数据行的第一项访问跟踪数据,自动确定所述多个数据行当中的第一数据行近期是否被访问过; 其中,第一数据行被存储在一个或多个第一数据块中; 在确定第一数据行近期被访问过之后,从一个或多个第一数据块中自动移除所述第一数据行并且将所述第一数据行存储在一个或多个热数据块中; 其中,所述一个或多个热数据块被指定用于存储所述多个数据行当中的近期被访问过的那些数据行; 其中,所述方法由一个或多个计算设备施行。
2.权利要求1的方法,其中,当数据库服务器正在执行时,还施行以下步骤: 自动确定所述多个数据行当中的第二数据行近期是否基于所述多项访问跟踪数据当中的对应于第二数据行的第二项访问跟踪数据而被访问过; 其中,第二数据行被存储在一个或多个第二数据块中; 在确定第二数据行近期未被访问过之后,从一个或多个第二数据块中自动移除所述第二数据行并且将所述第二数据行存储在一个或多个冷数据块中; 其中,所述一个或多个冷数据块被指定用于存储所述多个数据行当中的近期未被访问过的那些数据行。
3.权利要求2的方法,其中,当数据库服务器正在执行时,还施行以下步骤:通过使用一种或多种压缩机制来压缩所述一个或多个冷数据块。
4.权利要求1的方法,其还包括: 确定由数据库服务器接收到新数据行;以及 响应于接收到该新数据行,使得该新数据行被存储在所述一个或多个热数据块中。
5.权利要求1的方法,其中: 所述一个或多个第一数据块以及所述一个或多个热数据块被永久性地存储在一个或多个存储设备上;并且 所述方法还包括把所述一个或多个热数据块当中的每一个热数据块作为一个整体块从所述一个或多个存储设备拷贝到由数据库服务器管理的存储器高速缓存中。
6.权利要求1的方法,其中,所述多个数据行属于由数据库服务器管理的一个或多个数据库中的一个或多个表。
7.权利要求1的方法,其中,对于所述多个数据行当中的每一个特定数据行,所述多项访问跟踪数据包括相应的一项访问跟踪数据并且该项访问跟踪数据包括以下各项当中的一项或多项: 表明该特定数据行最后一次被读取的时间的第一时间值; 表明该特定数据行最后一次被修改的时间的第二时间值; 表明存储该特定数据行的表最后一次被读取的时间的第三时间值; 表明存储该特定数据行的表最后一次被修改的时间的第四时间值。
8.权利要求1的方法,其中,保持所述多项访问跟踪数据包括:将对应于所述多个数据行当中的一个特定数据行的特定访问跟踪数据连续地更新并存储在以下各项当中的一项或多项中: 所述特定数据行;以及 所述特定数据行或其一部分被存储在其中的特定数据块的块报头。
9.权利要求1的方法,其中: 所述一个或多个热数据块被包括在多个热数据块中,其中所述多个热数据块被组织在基于访问时间的分级结构中;并且 所述方法还包括当数据库服务器正在执行时,至少基于第一项访问跟踪数据从所述多个热数据块当中选择所述一个或多个热数据块。
10.权利要求1的方法,其中,在不对正由数据库服务器执行的进行中的操作和事务造成负面影响的情况下,施行从一个或多个第一数据块中自动移除所述第一数据行并且把所述第一数据行存储在所述一个或多个热数据块中。
11.权利要求1的方法,其中,根据在数据库服务器处配置的一条或多条策略施行从一个或多个第一数据块中自动移除所述第一数据行并且把所述第一数据行存储在所述一个或多个热数据块中。
12.—种计算机实施的方法,其包括: 保持分别对应于由数据库服务器管理的多个数据行的多项访问跟踪数据; 当数据库服务器正在正常操作模式下执行时,施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第一数据行的第一项访问跟踪数据,自动确定所述多个数据行当中的第一数据行`近期是否被访问过; 其中,第一数据行被存储在第一存储设备中; 在确定第一数据行近期被访问过之后,从第一存储设备中自动移除所述第一数据行并且将所述第一数据行存储在第二存储设备中; 其中,第二存储设备不同于第一存储设备; 其中,所述方法由一个或多个计算设备施行。
13.权利要求12的方法,其中,第二存储设备是高性能存储设备。
14.权利要求12的方法,其中,当数据库服务器正在执行时,还施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第二数据行的第二项访问跟踪数据,自动确定所述多个数据行当中的第二数据行近期是否被访问过; 其中,第二数据行被存储在第三存储设备中; 在确定第二数据行近期未被访问过之后,从第三存储设备中自动移除所述第二数据行并且将所述第二数据行存储在高容量存储设备中,所述高容量存储设备被指定用于存储所述多个数据行当中的近期未被访问过的那些数据行。
15.一种存储一个或多个指令序列的非暂态计算机可读存储介质,当所述指令序列由一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 保持分别对应于由数据库服务器管理的多个数据行的多项访问跟踪数据; 当数据库服务器正在正常操作模式下执行时,施行以下步骤,: 基于所述多项访问跟踪数据当中的对应于第一数据行的第一项访问跟踪数据,自动确定所述多个数据行当中的第一数据行近期是否被访问过;其中,第一数据行被存储在一个或多个第一数据块中; 在确定第一数据行近期被访问过之后,从一个或多个第一数据块中自动移除所述第一数据行并且将所述第一数据行存储在一个或多个热数据块中; 其中,所述一个或多个热数据块被指定用于存储所述多个数据行当中的近期被访问过的那些数据行。
16.权利要求15的非暂态计算机可读存储介质,其中,所述一个或多个指令序列还包括多个指令,当所述多个指令在数据库服务器正在执行的同时由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第二数据行的第二项访问跟踪数据,自动确定所述多个数据行当中的第二数据行近期是否被访问过; 其中,第二数据行被存储在一个或多个第二数据块中; 在确定第二数据行近期未被访问过之后,从一个或多个第二数据块中自动移除所述第二数据行并且将所述第二数据行存储在一个或多个冷数据块中; 其中,所述一个或多个冷数据块被指定用于存储所述多个数据行当中的近期未被访问过的那些数据行。
17.权利要求16的非暂态计算机可读存储介质,其中,所述一个或多个指令序列还包括多个指令,当所述多个指令在数据库服务器正在执行的同时由所述一个或多个处理器执行时,使得所述一个或多个处理器 施行以下步骤:通过使用一种或多种压缩机制来压缩所述一个或多个冷数据块。
18.权利要求15的非暂态计算机可读存储介质,其中,所述一个或多个指令序列还包括多个指令,当所述多个指令由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 确定由数据库服务器接收到新数据行;以及 响应于接收到该新数据行,使得该新数据行被存储在所述一个或多个热数据块中。
19.权利要求15的非暂态计算机可读存储介质,其中: 所述一个或多个第一数据块以及所述一个或多个热数据块被永久性地存储在一个或多个存储设备上;并且 所述一个或多个指令序列还包括多个指令,当所述多个指令由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤:把所述一个或多个热数据块当中的每一个热数据块作为一个整体块从所述一个或多个存储设备拷贝到由数据库服务器管理的存储器高速缓存中。
20.权利要求15的非暂态计算机可读存储介质,其中,所述多个数据行属于由数据库服务器管理的一个或多个数据库中的一个或多个表。
21.权利要求15的非暂态计算机可读存储介质,其中,对于所述多个数据行当中的每一个特定数据行,所述多项访问跟踪数据包括相应的一项访问跟踪数据并且该项访问跟踪数据包括以下各项当中的一项或多项: 表明该特定数据行最后一次被读取的时间的第一时间值; 表明该特定数据行最后一次被修改的时间的第二时间值; 表明存储该特定数据行的表最后一次被读取的时间的第三时间值;表明存储该特定数据行的表最后一次被修改的时间的第四时间值。
22.权利要求15的非暂态计算机可读存储介质,其中,使得保持所述多项访问跟踪数据的指令包括多个指令,当所述多个指令由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 把对应于所述多个数据行当中的一个特定数据行的特定访问跟踪数据连续地更新并存储在以下各项当中的一项或多项中: 所述特定数据行;以及 所述特定数据行或其一部分被存储在其中的特定数据块的块报头。
23.权利要求15的非暂态计算机可读存储介质,其中: 所述一个或多个热数据块被包括在多个热数据块中,其中所述多个热数据块被组织在基于访问时间的分级结构中;并且 所述一个或多个指令序列还包括多个指令,当所述多个指令由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤:当数据库服务器正在执行时,至少基于第一项访问跟踪数据从所述多个热数据块当中选择所述一个或多个热数据块。
24.权利要求15的非暂态计算机可读存储介质,其中,在不对正由数据库服务器执行的进行中的操作和事务造成 负面影响的情况下,由所述一个或多个处理器施行使得从一个或多个第一数据块中自动移除所述第一数据行并且把所述第一数据行存储在所述一个或多个热数据块中的指令。
25.权利要求15的非暂态计算机可读存储介质,其中,由所述一个或多个处理器根据在数据库服务器处配置的一条或多条策略来施行使得从一个或多个第一数据块中自动移除所述第一数据行并且把所述第一数据行存储在所述一个或多个热数据块中的指令。
26.一种存储一个或多个指令序列的非暂态计算机可读存储介质,当所述指令序列由一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 保持分别对应于由数据库服务器管理的多个数据行的多项访问跟踪数据; 当数据库服务器正在正常操作模式下执行时,施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第一数据行的第一项访问跟踪数据,自动确定所述多个数据行当中的第一数据行近期是否被访问过; 其中,第一数据行被存储在第一存储设备中; 在确定第一数据行近期被访问过之后,从第一存储设备中自动移除所述第一数据行并且将所述第一数据行存储在第二存储设备中; 其中,第二存储设备不同于第一存储设备。
27.权利要求26的非暂态计算机可读存储介质,其中,第二存储设备是高性能存储设备。
28.权利要求26的非暂态计算机可读存储介质,其中,所述一个或多个指令序列还包括多个指令,当所述多个指令在数据库服务器正在执行的同时由所述一个或多个处理器执行时,使得所述一个或多个处理器施行以下步骤: 基于所述多项访问跟踪数据当中的对应于第二数据行的第二项访问跟踪数据,自动确定所述多个数据行当中的第二数据行近期是否被访问过; 其中,第二数据行被存储在第三存储设备中;在确定第二数据行近期未被访问过之后,从第三存储设备中自动移除所述第二数据行并且将所述第二数据行存储在高容量存储 设备中,所述高容量存储设备被指定用于存储所述多个数据行当中的近期未被访问过的那些数据行。
【文档编号】G06F17/30GK103688259SQ201280035438
【公开日】2014年3月26日 申请日期:2012年5月18日 优先权日:2011年5月19日
【发明者】A·加尼萨, V·玛瓦, V·卡博尔 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1