CN107851123B - 在存储器中虚拟列单元内具体化表达式以加速分析查询 - Google Patents
在存储器中虚拟列单元内具体化表达式以加速分析查询 Download PDFInfo
- Publication number
- CN107851123B CN107851123B CN201680043491.5A CN201680043491A CN107851123B CN 107851123 B CN107851123 B CN 107851123B CN 201680043491 A CN201680043491 A CN 201680043491A CN 107851123 B CN107851123 B CN 107851123B
- Authority
- CN
- China
- Prior art keywords
- memory
- column
- expression
- unit
- query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2393—Updating materialised views
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/2454—Optimisation of common expressions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Abstract
描述了用于具体化表达式的预先计算的结果的技术。在实施例中,一个或多个列单元的集合被存储在易失性存储器或非易失性存储器中。每个列单元与属于由数据库服务器实例管理的数据库内的盘上的表的列对应,并且包括来自对应列的数据项。一个或多个虚拟列单元的集合以及将该一个或多个列单元的集合与该一个或多个虚拟列单元的集合相关联的数据也被存储在存储器中。该一个或多个虚拟列单元的集合包括特定虚拟列单元,该特定虚拟列单元存储通过在盘上的表的至少一列上评估表达式而得出的结果。
Description
技术领域
本公开涉及在存储器中存储单元内存储和维护内部计算和表达式的评估结果。
背景技术
数据库查询包括被称为表达式的结构,其中表达式通常是一个或多个值、运算符和/或函数的组合。在查询执行期间,数据库服务器实例评估(evaluate)查询表达式,以生成查询结果。查询表达式可以使数据库服务器实例执行各种操作,诸如过滤、投影、聚合、排序或以其它方式操纵存储在数据库对象内的值。一些查询表达式需要处理密集型操作,这些处理密集型操作在每次计算都会消耗大量资源。在一些情况下,这些表达式跨多个查询或在同一个查询的多个部分出现。当这些表达式在大型数据集合上被重复评估时,数据库服务器实例的性能会受到很大的影响。
数据库管理员用来优化在计算上成本高昂的查询的执行的一种做法是创建具体化的(materialized)视图。具体化的视图是包含查询的结果的数据库对象。例如,具体化的视图可以捕获两个联接(join)在一起的表的最终结果。一旦具体化的视图被创建,后续的查询就可以被重写为访问具体化的视图而不是执行另一个表联接操作。因此,具体化的视图避免了多次执行可能需要大量时间来计算的查询的需要。
虽然具体化的视图对于捕获查询的最终结果是有用的,但是具体化的视图不捕获跟踪各个表达式在查询内的使用的数据。另外,具体化的视图不捕获在查询执行期间仅驻留在存储器中的中间表达式结果。例如,散列联接操作根据联接属性来计算散列值,以确定要从两个不同的表中联接哪些记录。具体化的视图可以存储表示联接操作的最终结果的组合记录。但是,具体化的视图不捕获与散列操作相关的数据,因为所得到的散列值不是最终查询结果的一部分,也不永久存储在数据库内。类似地,在查询执行期间中仅驻留在存储器中的其它表达式评估和内部计算的结果通常不被数据库服务器捕获。
本节中描述的做法是可以追求的做法,但不一定是先前已经构想或追求的做法。因此,除非另有说明,否则不应当假定本节中描述的任何做法仅仅因为它们被纳入本节中就被当作现有技术。
附图说明
在附图的图示中通过示例而非限制图示了各种实施例,并且其中相同的标号指相似的元件,并且其中:
图1是绘出根据实施例的、用于创建和维护对表达式评估和内部计算的结果进行高速缓存的存储器中单元的示例系统设计的框图;
图2是绘出根据实施例的、用于为存储器中表达式执行后台填充的示例过程的流程图;
图3是绘出根据实施例的、维护由IMCU-IMEU对共享的元数据的示例共享元数据单元的框图;
图4是绘出根据实施例的、用于识别和使用存储器中表达式以优化查询执行的示例过程的流程图;
图5是绘出根据实施例的、用于存储器中内部单元的示例设计的框图;
图6是绘出根据实施例的、用于用计算结果填充存储器中内部单元并使用具体化的计算结果来优化查询处理的示例过程的流程图;以及
图7是示出可以在其上实现实施例的计算机系统的框图。
具体实施方式
在下面的描述中,出于解释的目的,阐述了许多具体细节,以提供对本发明的透彻理解。但是,将认识到的是,本发明可以在没有这些具体细节的情况下实践。在其它情况下,结构和设备以框图形式示出,以避免不必要地模糊本发明。
一般概述
分析查询常常包含在执行期间会消耗大量系统资源的复杂表达式或计算。通过自动识别这些频繁使用的复杂表达式或计算并高速缓存其结果,数据库服务器可以通过减少重复计算来改进查询性能并增加可缩放性,从而减少在执行期间消耗的系统资源。此外,通过存储高效的存储器中的经优化的表示,可以改进对某些数据类型的查询处理。
在各种实施例中,描述了用于捕获和处理“存储器中表达式”(在本文中也被称为“IME”)的计算机系统、存储的指令和技术步骤。如本文所使用的,“存储器中表达式”被广义地分类为其结果已被预先计算并高速缓存在易失性存储器中的任何表达式。IME的预先计算的结果在本文中被称为“预先计算的结果”或PCR。PCR可以既被高速缓存在易失性存储器中又被持久存储,或者可以只存在于易失性存储器中(没有任何持久存储的副本)。PCR可以包括在不同粒度级别计算的结果,这提供了查询优化和执行期间的灵活性。
为了存储IME的PCR,在本文中被称为“存储器中列式(columnar)单元(IMCU)”和“存储器中表达式单元(IMEU)”的存储器单元集合被分配并由数据库服务器实例维护。IMCU存储列单元的集合,其中每个列单元与属于由数据库服务器实例管理的数据库内的盘上(on-disk)的表的列对应,并包括来自对应列的数据项。IMEU存储一个或多个“虚拟列单元”的集合,其中每个虚拟列单元可以存储通过在一个或多个列中的至少一列上评估表达式而得出的PCR。指针和/或其它关联数据被存储在易失性或非易失性存储器中(例如,在IMCU的头部中)中,以将列单元的集合与虚拟列单元的集合相关联。针对IMCU的查询可以从虚拟列的集合访问PCR而不是重新评估表达式结果。
根据实施例,数据库服务器实例还维护在本文中被称为“存储器中内部单元(IMIU)”的存储器中单元。IMIU为由数据库服务器实例正在跟踪的计算存储元数据值的集合。IMIU还可以存储用于一个或多个计算的一个或多个结果集合。在实施例中,响应于数据库服务器实例接收查询,数据库服务器实例在执行查询期间识别用于评估的计算的集合。响应于识别出计算的集合,数据库服务器实例评估该计算的集合中的至少一个计算,以获得用于该计算的集合中的第一计算的第一结果集合。在评估至少一个计算之后,数据库服务器实例在存储器中单元内存储第一计算结果集合。数据库服务器还存储将与第一计算相关联的元数据值集合映射到第一计算结果集合的映射数据。如果接收到涉及该计算的后续查询,那么数据库服务器实例可以从IMIU访问高速缓存的计算结果,而不是重新评估该计算。
系统概述
在实施例中,数据库服务器包括IME框架。IME框架支持用于捕获和处理IME的各种功能,包括但不限于
·识别用于存储器内具体化的表达式和其它计算;
·创建和维护用于高速缓存IME和其它计算的存储器中单元;以及
·查询存储器中单元以获得更快的投影和谓词(predicate)评估。
图1是绘出根据实施例的存储器中单元的示例系统设计的框图,其中存储器中单元用于创建和维护高速缓存表达式评估和内部计算的结果。数据库服务器实例100包括后台进程池110、存储器中区域120、表达式统计信息存储库150和前台进程池140。
后台进程池110包括多个后台进程,其包括存储器中协调器(IMCO)112和负责在存储器中区域120内执行后台任务的工作者进程114。在实施例中,后台填充和用于后台进程的其它任务在它们出现时排队。然后,IMCO 112可以与工作者进程114协调这些任务的执行。IMCO 112可以在工作者进程114之间指派和平衡任务,工作者进程114可以并行执行某些任务。
存储器中区域120存储多个存储器中单元,包括IMCU 122a至122n、存储器中表达式单元IMEU 124a至124n、存储器中内部单元IMIU 126a至126n以及共享的元数据单元(SMU)128a至128n。每个存储器中单元可以包括专门分配给该单元的一个或多个连续的存储器块,在本文中被称为“存储器中延伸区(extent)”。定义存储器中单元的各种属性的元数据也可以由数据库服务器实例100维护。例如,元数据可以包括但不限于识别哪些存储器中延伸区属于特定存储器中单元的延伸区列表、指向单元内可用存储空间的空闲空间指针以及唯一地识别每个存储器中单元的标识符。下面进一步详细描述不同类型的存储器中单元中的每一种。
前台进程池140包括负责在接收到查询时对其进行处理的前台进程的集合。前台进程包括查询进程142,其执行诸如查询编译、查询执行计划生成和优化、并行查询协调和查询执行之类的任务。前台进程还包括事务进程144,其相对于存储器中区域120维护数据库事务的原子性和一致性。
表达式统计信息存储库(ESS)150跟踪已经在查询中提交的表达式的各种统计信息和其它元数据值。虽然被描绘为驻留在存储器中区域120之外,但是在一些实现方案中,ESS 150可以全部或部分地在存储器中区域120内维护。附加地或可替代地,ESS 150可以被持久地存储在盘上或某种其它非易失性存储介质中。
表达式评估
在查询执行期间,查询进程142可以评估被包括在查询内的一个或多个查询表达式。在这个上下文中,“表达式”是指指定一个或多个操作以及在其上执行这一个或多个操作的一个或多个操作数的查询构造。可以使用命令的集合来指定这些操作,诸如结构化查询语言(SQL)语句、数学运算符等等。操作数可以与对象(诸如列和列函数、常量或其它值)对应。作为示例,表达式“a*b”包括操作数“a”和“b”,它们与表中的不同列对应。该表达式还包括乘法运算符“*”,这会使数据库服务器实例在评估表达式时将来自列“a”和“b”的值相乘。所使用的运算符的组合和类型在不同的查询表达式之间可能差别很大。
表达式可以发生在数据库查询内的各个位置。例如,在SQL语句中,表达式可以存在于选择列表、聚合函数、SQL子句或某个其它SQL构造中。下面的表1绘出了示例数据库查询,其中每个查询包括一个或多个表达式。以下查询在实际应用中可能没有用处,而是为了说明的目的被提供以讨论查询表达式的识别和跟踪。每个查询与查询标识符相关联,以帮助下面的讨论。
表1:包括不同表达式的样本查询
查询Q1至Q4在查询的不同部分中包括各种类型的表达式。例如,查询Q1在选择列表中包括表达式“sal+comm”,Q2在where子句中包括表达式“upper(name)”,并且Q3在groupby子句中包括表达式“to_date(hiredate,format)-2”。在Q4中,两个表达式“deptno*2”和“deptno*2/3”位于where子句中。
根据实施例,表达式可以被另一个表达式完全包含。被其它表达式包含的表达式在本文也可以被称为子表达式。作为多个子表达式的合成物但本身不是子表达式的表达式在本文中被称为“顶级表达式”。例如,复合表达式“(a+b)*(c+d)”可以被认为是包括子表达式“a+b”和“c+d”的顶级表达式。
上面提供的示例表达式包括在查询中明确记载的构造。但是,在一些实施例中,数据库服务器实例可以识别并高速缓存隐式表达式和/或其它计算。隐式表达式是查询优化器在查询编译期间生成以优化查询执行计划的表达式,即使该表达式之前未在数据库查询中明确记载。作为示例,如果数据库查询包括表达式“a like'cat'”,那么优化器可以将表达式分成两部分:“a>'c'”和“a like'cat'”。第一个表达式可以被包括以作为初步过滤措施,以减少评估成本相对高昂的表达式“a like'cat'”的次数。隐式表达式可以作为目标运算符被添加到查询执行计划中,该目标运算符对输入行的集合进行操作,以得出输出行的集合。
显式表达式和隐式表达式是如下的计算的示例,即,在这些计算中,在表达式结果中的行与来自被用于计算该表达式结果的一个或多个操作数列的表行之间存在一对一映射。例如,可以从列“a”和“b”中的对应表行的值得出用于“a+b”的表达式结果中的每一行。其它形式的计算可以在表行与计算结果之间没有一对一映射。作为示例,bloom过滤器操作可以将散列函数应用于联接键列的不同字典条目的值。由于列内的一些值可能不是不同的,因此多个行可能映射到同一字典条目和散列值。
一些计算在查询执行期间在内部被计算,而没有被明确记载在查询中。例如,可以执行诸如数据转换、散列、级联等等操作,即使在查询中没有明确记载这种操作。在一些情况下,这些操作在查询编译期间由查询优化器选择,以优化查询的执行。数据库服务器实例100可以跟踪并高速缓存显式表达式、隐式表达式、内部计算和/或其它形式的计算。
存储器中的列式单元(columnar unit)
IMCU 122a至122n各自存储一个或多个列单元(CU)(诸如CU 132)的集合,其与属于由数据库服务器实例100管理的数据库内的一个或多个盘上的表的一个或多个盘上的列对应。在概念上,IMCU 122a至122n中的每一个将表的行划分成单独的块。块内的行被转换成列为主的格式,并且可以基于选定的存储器中格式进行压缩。然后将块的行作为一个或多个CU加载到IMCU中,其中CU遵守存储器中格式。作为示例,IMCU 122a可以包括一个或多个列单元的第一集合,其中每个列单元与表t的不同的相应列对应并且以压缩或未压缩的列为主的格式存储用于相应列的第一一百万行。类似地,IMCU 122b可以包括一个或多个列单元的第二集合,其中第二集合中的每个列单元与表t的不同的相应列对应并且以压缩或未压缩格式存储用于相应列的第二一百万行。表t的剩余行可以类似地被划分成块并高速缓存在存储器中区域120内的其它IMCU中。
存储器中表达式单元
IMEU 124a至124n中的每一个是存储器中高速缓存,IME被存储于其中以供将来重用,从而改进查询性能。在实施例中,数据库服务器实例100按照需求为IMEU 124a至124n分配固定量的存储器,并将IMEU 124a至124n中的每一个作为有界高速缓存来维护。一旦为IMEU分配了空间,数据库服务器实例100就识别将受益于高速缓存的表达式并将对于IME的评估结果存储在IMEU 124a至124n中的一个或多个当中。
IMEU可以被实现为IMCU的逻辑扩展。IMEU在逻辑上扩展的IMCU在本文中被称为“父”IMCU。在父IMCU内,映射数据(诸如指针)被维护在IMCU头部中,以将IMCU中维护的CU的集合与IMEU中高速缓存的表达式结果相链接。IMEU还可以存储指向父IMCU的后向指针,这取决于特定的实现方案。在IMCU上的扫描操作期间,指针可以用于识别对应的IMEU以及在其中高速缓存的任何表达式结果。IMEU 124a至124n中的每一个因此充当用于存储父IMCU的表达式结果的每IMCU的容器。
在实施例中,数据库服务器实例100可以自动为IMEU 124a至124n分配空间,以扩展对应的父IMCU。例如,当为已经启用存储器中存储的特定分段创建IMCU时,也可以创建对应的IMEU并将其映射到新创建的IMCU。如果父IMCU从存储器中被丢弃,那么对应的IMEU也可以从存储器中被丢弃。
在实施例中,每个IMEU存储用于在与存储在父IMCU中的列单元对应的一个或多个列上操作的表达式的PCR。作为示例,IMCU 122a可以存储用于特定表的列“a”和“b”的行一至十的值,而IMCU 122b存储来自相同表列的从行十一至二十的值。如果表达式“a*b”被识别为IME,那么IMCU 122a可以包括指向IMEU 124a的指针,IMEU 124a存储“a*b”对于前十行的PCR。IMCU 122b可以包括指向IMEU 124b的指针,其存储针表达式“a*b”对接下来的十行的结果。类似地,来自操作数列的其它行以及针对IME的PCR可以分别分布在不同的IMCU和IMEU上。
IMEU还可以继承来自父IMCU的属性的集合以及之前用于填充父IMCU的基础盘上分段。例如,如果该基础分段和父IMCU是分布式集群或复制的集群的一部分,那么IMEU也可以跨分布式数据库的多个节点来分布或复制。作为另一个示例,IMEU中的数据可以继承父IMCU的压缩方案,由此使得数据库服务器实例使用用于压缩IMCU中的列单元的相同压缩算法来压缩IMEU中的数据。
虚拟列单元
PCR与列类似,因为给定表达式的PCR每行包括单个值。因此,可以将PCR视为虚拟列,并且存储PCR的结构在本文被称为“虚拟列单元”或VCU。在实施例中,IMEU 124a至124n中的每一个将PCR存储为一个或多个虚拟列单元的集合。VCU可以以压缩或未压缩的每行一个结果值的格式来存储来自表达式的PCR的值。作为示例,数据库服务器实例100可以响应于评估表达式“a/b”而得出列向量,其中列向量中的每一行包括通过将列“a”的行中的第一值除以列“b”的对应行中的第二值所获得的结果值。因此,列向量中的第一行具有通过将列“a”中的第一个值除以列“b”中的第一个值所获得的结果值,第二结果值是通过将列“a”中的第二个值除以列“b”中的第二个值所获得的,等等。如果表达式“a/b”被识别用于高速缓存,那么数据库服务器实例在IMEU内创建存储用于“a/b”的PCR的虚拟列单元,使得列向量内的相继的值被连续地存储在存储器中。
虚拟列可以由跨不同IMEU分布的多个VCU组成。这种情况在用作表达式的操作数的表的实际的列跨不同IMCU分布的情况下可能发生。作为示例,IMCU 122a可以存储来自表“t”的列“a”和“b”的第一个一百行,并且IMCU 122b可以存储列“a”和“b”的第二个一百行。为了对针对表达式“a*b”的PCR进行高速缓存,数据库服务器实例可以将包含针对该第一个一百行的PCR的第一虚拟列单元存储在IMEU 124a中,并且将包含针对该第二个一百行的PCR的第二虚拟列单元存储在IMEU 124b中。属于同一虚拟列的其它虚拟列单元可以跨其它IMEU分布,使得这些虚拟列单元在虚拟列单元中的行的数量与相关联的IMCU的列单元中的行的数量之间维持一对一关系。
当IMEU对针对单个IME的PCR进行高速缓存时,可以使用单个VCU来存储这些PCR。如果IMEU对针对多个IME的PCR进行高速缓存,那么IMEU可以跨多个VCU存储PCR,其中不同的VCU存储针对不同IME的PCR。例如,IMEU 124a存储VCU 134,VCU 134可以包括具体化针对第一表达式(例如,“a*b”)的PCR的第一虚拟列单元以及具体化针对附加表达式(例如,“a+c”、“upper(b)”等等)的PCR的一个或多个附加的虚拟列单元。VCU 134可以按照被维护以将父IMCU链接到IMEU的映射数据来在逻辑上扩展在父IMCU内维护的CU。
虚拟列可以与一个或多个列标识符相关联,这一个或多个列标识符可以与作为虚拟列的一部分的一个或多个VCU相关联。示例列标识符包括但不限于:
·基于列在表内的逻辑排序的内部列编号;
·基于列在盘上存储的物理排序的分段列编号;以及
·基于列在表内的用户定义的逻辑排序的用户列编号。
逻辑列编号可以被顺序地被指派给虚拟列,或以唯一地识别虚拟列在对应表内的位置的任何其它方式被指派给虚拟列。由于虚拟列不是持久地存储在盘上,因此分段列编号可以被指派空(null)或零值。但是,在一些数据库管理系统中,数据库服务器实例的某些层可能依赖分段编号来唯一地识别列。在这种场景中,可以将虚假分段列编号用于虚拟列。虚假分段列编号可以被选择为使得它不与用于表中的物理存储在盘上的非虚拟列的分段列编号冲突。列编号和定义虚拟列的特性的其它元数据可以存储在虚拟列的头部中。
对于给定的表达式,针对表中所有行的表达式的预先计算的结果被统称为用于该表达式的“整个虚拟列”。在一些情况下,用于表达式的整个虚拟列可以存储在一个或多个VCU中。当用于表达式的整个虚拟列被高速缓存时,针对每个行的评估结果被存储并可以从至少一个IMEU访问。在其它情况下,虚拟列的第一部分存储在存储器中,而第二部分不被预先计算。在这种场景中,评估结果中仅仅行的子集存储在一个或多个IMEU中。当由于存储器约束或其它原因造成用作操作数的列的一部分未被存储在IMCU中时,可能不预先计算行的不同子集。如果发生这种情况,那么被高速缓存的VCU的部分可以从存储器中区域120直接访问。未预先计算的部分可以让值在运行时被计算。如果预先计算的结果中的一些结果存储在盘上而不是存储在易失性存储器中,那么可以在需要对与该结果对应的表达式进行评估的查询的运行时将预先计算的结果加载到易失性存储器中。
在实施例中,使用一种或多种压缩技术(诸如字典编码、游程编码(run-lengthdecoding)等等)来压缩VCU。VCU可以在与父IMCU内的CU相同的级别处被压缩或者在不同的级别处被压缩,这取决于特定的实现方案。如果在不同的级别处被压缩,那么可以使用压缩分析器来分析各种压缩算法(如果应用于VCU数据)的益处并推荐压缩级别。VCU可以在比父IMCU中的CU更高的级别处被压缩,以针对具体化的表达式中的每一个来最小化存储器中区域120内的空间占用。
用于存储器中具体化的表达式的识别
在实施例中,数据库服务器实例100包括用于识别将受益于IMEU 124a至124n内的存储器中具体化的表达式的逻辑。可以从一个或多个源识别表达式。示例源可以包括但不限于:由用户明确识别为用于高速缓存的用户定义的虚拟列,以及还没有由用户明确识别为用于高速缓存而是由数据库服务器实例100自动检测并选择用于高速缓存的查询表达式。
用户(诸如数据库管理员、数据库客户端或其它应用程序)可以明确地定义用于存储器中具体化的虚拟列。用户可以通过数据库命令来定义用于填充存储器中列的表达式以及虚拟列。作为示例,可以通过下面的数据定义语言(DDL)语句来定义虚拟列:“createtable t(a number,v as(2*a),c number)”。在这里,“a”和“c”是常规的盘上列,而“v”是虚拟列。虚拟列“v”被定义为列“a”上的表达式乘以常量“2”。其它虚拟列可以类似地被定义为一个或多个操作数上的表达式,其中这些操作数可以包括物理列和/或常量。虚拟列没有物理分配,并且其值不物理地存储在盘上。在被查询时,虚拟列可以看起来像物理列,但是值是被计算的或者(如果被具体化在存储器中)是在查询执行期间在运行时从一个或多个IMEU中取得的。
附加地或作为具体化用户定义的虚拟列的替代,数据库服务器实例100可以自动检测将受益于存储器中具体化的表达式。数据库服务器实例100可以至少部分地基于在ESS150中维护的表达式统计信息来确定哪些表达式将受益于存储器中具体化。用于确定是否具体化表达式的表达式统计信息可以随实现方案而异。作为示例,数据库服务器实例100可以从ESS 150中选择前n个最频繁地被评估的查询表达式来具体化。在另一个示例中,数据库服务器实例100可以从ESS150中选择前n个成本最高的查询表达式来具体化。表达式的成本可以基于在表达式评估期间消耗的处理和/或其它计算资源的量来确定。在另一个示例中,数据库服务器实例100可以将表达式的评估计数乘以该表达式的每次评估成本,以计算该表达式的排名值。存储器中区域120可以对(如由与每个表达式相关联的排名值所确定的)排名最高的表达式进行高速缓存。在其它实施例中,可以使用其它统计信息和标准来选择要在存储器中具体化的表达式。
对于每个唯一的表达式,ESS 150可以跟踪
·编译时信息,诸如静态成本、表达式文本等等;以及
·运行时信息,诸如动态成本、表达式评估计数、表达式评估的时间戳等等。
数据库服务器实例100可以使用统计信息中的一个或多个来对表达式进行排名、排序和选择以在存储器中区域120内具体化。作为示例,数据库服务器实例100可以基于存储在ESS 150中的编译时和运行时信息确定被跟踪的哪些表达式当前是“最热门”的。表达式的热度值或排名可以作为评估频率和评估成本的函数来计算。ESS 150可以按照表达式条目的排名来对表达式条目进行排序,以便于识别前n个最热门的表达式。
在实施例中,被识别用于存储器中具体化的表达式作为隐藏的虚拟列被添加到对应的表。隐藏的虚拟列(如用户定义的虚拟列)不将其值物理地存储在盘上并且可以跨一个或多个存储器中VCU分布。隐藏的虚拟列与用户定义的虚拟列的不同之处在于隐藏的虚拟列对用户不可见。作为示例,当在表上执行“select*”或“describe”操作时,用户可以查看哪些物理列和用户定义的虚拟列属于该表。但是,隐藏的虚拟列信息不被返回或显示。
根据实施例,预测分析也可以考虑用于高速缓存的表达式的选择。数据库服务器实例100可以包括分析部件,该分析部件基于ESS 150中维护的统计信息,基于从最近接收到的查询检测到的趋势来预测哪些表达式可能变得热门。例如,如果某些查询提取日期列的日(day)部分,那么分析部件可以预测将日期的其它部分(诸如月、年)存储为隐藏的虚拟列可能会是有帮助的。类似地,数据库服务器实例100可以基于ESS 150内跟踪的频繁同现模式来预测哪些其它表达式将变“热门”。
IMEU的后台填充
一旦识别出用于存储器中具体化的表达式,数据库服务器实例100就评估表达式并用PCR填充一个或多个IMEU。在填充期间,IMEU中的行和父IMCU中的行之间可以维持一对一的映射。作为示例,如果数据库服务器实例100正在用表达式“e/f”的评估结果填充存储器中区域120,那么数据库服务器实例100可以将评估结果存储在包含来自用于计算该结果的操作数列的值的IMCU中。因此,如果IMCU 122a存储用于列“e”和“f”的第一一百万行,那么数据库服务器实例100在IMEU 124a中生成包括第一一百万行PCR的VCU。类似地,如果IMCU 122b存储用于列“e”和“f”的第二一百万行,那么数据库服务器实例100在IMEU 124b中生成包括第二一百万行PCR的VCU。
在实施例中,后台进程池110包括负责用PCR填充IMEU的后台进程集合。通过使用后台进程,可以将表达式结果值加载到VCU中而不会使前台查询进程遭受性能下降。后台进程池110包括用于协调IMEU 124a至124n的后台填充的IMCO 112以及将表达式结果值加载到IMEU 124a至124n中的工作者进程114。IMCO 112可以跨不同的工作者进程分发填充任务,这些工作者进程可以并行操作以将PCR加载到IMEU 124a至124n中。
图2绘出了根据实施例的、用于为存储器中表达式执行后台填充的示例过程。在步骤202,后台进程(诸如IMCO 112)查询ESS 150以识别用于存储器中具体化的热门表达式。对ESS 150的查询可以周期性地执行、通过接收到数据库查询而触发,或者响应于某个其它事件而执行,这取决于特定的实现方案。
在步骤204,后台进程基于查询来确定一个或多个候选表达式以在存储器中具体化。例如,如前所述,后台进程可以向ESS 150查询按照评估计数和成本的函数排名的前n个“最热门”表达式。如果由ESS 150返回的前n个表达式中的任何一个还没有在存储器中具体化,那么后台进程可以选择该表达式作为具体化的候选。
在步骤206,后台进程确定是否从存储器中区域120中逐出任何已具体化的表达式,以便为所选择的用于具体化的(一个或多个)候选表达式留出空间。如果没有足够的空间来高速缓存这(一个或多个)候选表达式,那么该过程继续到步骤208。否则,该过程继续到步骤210。
在步骤208,后台进程从存储器中区域120中逐出一个或多个虚拟列。后台进程可以实现高速缓存替换策略,以确定要逐出哪些虚拟列。在示例中,后台进程基于存储在ESS150中的统计信息来确定当前高速缓存的虚拟列中哪个是“最冷门”的。如果虚拟列最近被访问得最少、被使用得最少或者基于其它标准,那么可以认为该虚拟列是“最冷门”的。后台进程可以通过将虚拟列标记为不可用和/或从表中丢弃虚拟列来逐出虚拟列。
在步骤210,后台进程针对每个候选表达式计算结果值并将其加载到一个或多个VCU中。对于每个相应的IMEU,后台进程可以从父IMCU访问用于候选表达式的操作数列值。如果来自操作数列的值是陈旧的或者父IMCU当前不存在,那么后台进程可以从盘取得这些值、创建新的IMCU(如果不存在的话),并将这些值加载到父IMCU中。然后使用来自操作数列的值来计算评估结果,这些评估结果被存储在对应的IMEU中。
IMEU一致性维护
在实施例中,IMCU 122a至122n和IMEU 124a至124n被维护为只读单元。在这种状态下,在数据被加载到IMEU和父IMCU之后发生的事务性改变不会在这些存储器中单元内立即具体化。没有立即具体化这些结果的一个原因是CU和VCU以压缩或非压缩的列为主的格式存储数据。虽然列为主的格式为处理许多分析查询提供了显著的优势,但是一般可以更高效地在以行为主的格式存储的数据上执行更新。因此,更新可以针对以行为主的格式存储数据的对象而不是以列为主的格式存储数据的IMCU 122a至122n和IMEU 124a至124n。
为了维护事务一致性,数据库服务器实例100监视操作数列值的改变。如果事务提交对操作数列的行内的值的更新,那么针对该行高速缓存的PCR将不再是有效的。为了防止返回陈旧的PCR,共享的元数据单元128a至128n跟踪被高速缓存在存储器中区域120内的哪些行值不再有效。响应于检测到对存储器中启用(in-memory enabled)的分段内的行的更新,事务进程144可以更新SMU 128a至128n中的一个或多个,以指示存储器中单元内的该行不再有效。在替代实施例中,可以以比行更精细的粒度来维护无效信息。例如,在被更新的行内,数据库服务器实例可以跟踪哪些列被实际更新了。如果即使行已被更新列也没有被更新,那么该列中的值仍然可以被视为有效。类似地,即使行的其它列被更新了,如果来自表达式中涉及的(一个或多个)列的值未被更新,那么针对同一行的预先计算的结果也可以被视为有效。
通过维持IMEU与父IMCU之间的表行的一对一映射,可以使用同一SMU来跟踪两个存储器中单元的改变。任何在IMCU中无效的行在IMEU中也是无效的。如果行无效,那么针对该行的值将从盘上或事务日志中的最新映像提供,而不是从IMCU或IMEU提供。因此,SMU128a至128n中的每一个可以与对应的IMCU和IMEU相关联,以跟踪包含在其中的CU和VCU内的各个行的状态。例如,SMU 128a跟踪CU 132和VCU 134内的行的有效性。类似地,SMU 128b跟踪存储在IMCU 122b中的CU以及存储在IMEU 124b中的VCU的行的有效性,并且SMU 128n跟踪存储在IMCU 122n内的CU和存储在IMEU 124n中的VCU的行的有效性。
参考图3,图3绘出了SMU 330,SMU 330用于跟踪IMCU 310和IMEU 320内的哪些行是有效的。IMCU 310包括CU 312和CU 314,并且IMEU 320包括VCU 322。CU 312存储来自列a的值以及CU 314存储来自列b的值。IMEU存储针对表达式“a*b”的PCR。SMU 330存储无效性位向量(BV)332,其中每个位与特定的行对应,并且位的值指示对应的行是有效的还是无效的。如果数据操纵语言(DML)事务对先前未被失效的行进行更新,那么BV 332中用于该行的位的值被改变为指示CU 312、CU 314和VCU 322中的该行不再有效。在查询处理期间,查询进程142可以读取BV 332,以确定哪些高速缓存的值要从存储器中区域120取得以及哪些值要从事务日志或盘取得。如图所示,可以使用同一位向量来跟踪IMCU和IMEU二者中的行的有效性。
作为只读单元,IMCU 122a至122n和IMEU 124a至124n是根据到某个时间点为止当前的数据构建的。在该时间点之后所做的改变将不会反映在IMCU 122a至122n和IMEU 122a至124n中。例如,IMCU 122a至122n和IMEU 124a至124n可以存储到加载系统改变编号(SCN)或其它逻辑时间戳为止当前的数据。SMU 128至128n在IMCU的加载时间之后跟踪IMCU所跨越的行上的事务改变。在一些情况下,改变的行可以被记录在事务日志中,其中该事务日志记录哪些事务已经被提交。为了充分利用SMU 128a至128n中的无效跟踪的事务符号(notion),数据库服务器实例100可以填充IMEU使得该IMEU以与父IMCU相同的逻辑时间被构建。当维持这种一致性时,在IMEU中被标记为无效的行也可以在父IMCU中被视为无效,反之亦然。为了构建IMEU使得PCR以与IMCU中的操作数值相同的逻辑时间被构建,负责填充该IMEU的后台进程可以基于IMCU的加载SCN发出闪回(flashback)查询。利用闪回查询,过去的数据会如在闪回查询中所指定的SCN时间处它存在的那样被返回。因此,后台进程无视在IMCU被构建的时间与IMEU被构建的时间之间可能出现的操作数列值的更新。当维持这种一致性时,IMEU的添加从逻辑上扩大了父IMCU的每一个行。该IMEU在概念上可以被认为是向行添加更多的列。在这种IMEU的情况下,将虚拟列添加到存储在IMCU中的物理列。
存储器中列式单元的重新填充
为了刷新已经变陈旧的存储器中单元,数据库服务器实例100对重新填充任务进行排队,以刷新IMCU 122a至122n和IMEU 124a至124n内的无效数据。IMCO 112可以通过在工作者进程114之间指派和分发队列中的重新填充任务来协调存储器中单元的重新填充。当指派了重新填充任务时,工作者进程将更新后的值重新加载到父IMCU中。工作者进程还重新计算无效行的表达式结果值,并将更新后的表达式结果值加载到IMEU中。工作者进程还更新对应的SMU,以指示更新后的行不再是无效的。
在实施例中,每当父IMCU被重新填充时,IMEU 124a至124n都被重新填充。因此,每当IMCU 122a被重新填充时,IMEU 124a可以被重新填充,每当IMCU 122b被重新填充时,IMEU 124b可以被重新填充,等等。通过作为同一填充任务的一部分来重新填充相关的存储器中单元,IMEU被保持与父IMCU同步。因此,IMCU中的CU与IMEU中的VCU之间的一致性被维持。
数据库服务器实例100可以基于一个或多个替换策略的集合来确定重新填充任务的优先级。替换策略的集合可以考虑各种因素,包括但不限于无效的行的数量、特定IMCU或IMEU上的扫描次数、用户指定的表的优先级以及压缩级别。例如,如果数据库服务器实例100根据SMU 128a确定阈值数量的行已经无效,那么数据库服务器实例100可以将用于IMCU122a和IMEU 124a的重新填充任务入队。阈值可以取决于IMCU 122a和IMEU 124a有多么频繁地被访问而变化。随着访问频率的增加,触发重新填充的行的阈值数量可以减少。
当IMCU和IMEU对被调度用于重新填充时,IMCU和IMEU的先前版本可以保持可访问且可用于查询,直到重新填充任务完成。例如,如果后台进程正在将值加载到新版本的IMCU122a和IMEU 124a中,那么数据库服务器实例100可以接收需要访问被高速缓存在IMCU122a的先前版本中的值的查询。在这种场景中,执行查询的前台进程可以访问来自先前版本的IMCU 122a的值。一旦重新填充完成,IMCU和IMEU的先前版本就可以立即丢弃,或者可以继续在可配置的持续时间内保持可访问。通过维护先前的版本,增加了IMCU-IMEU对的存储占用空间。但是,所接收的具有低于新版本的IMCU-IMEU对的加载SCN但高于先前版本的IMCU-IMEU对的加载SCN的扫描SCN的查询可以受益于访问来自先前版本IMCU-IMEU对的值。
使用存储器中表达式的查询优化
通过在IMEU中以行为基础存储“热门”表达式的结果,查询优化器可以改进引用具体化的表达式的后续查询的性能。数据库服务器实例100可以从存储器中区域120访问PCR,而不是重新评估表达式。此外,通过具体化用户定义的虚拟列,数据库服务器实例100可以向用户提供类似于已经在存储器中具体化的物理的盘上的列的扫描性能,但没有额外的盘开销。
在实施例中,查询被重写为访问被存储在隐藏的虚拟表达式中的具体化的表达式。如果数据库服务器实例100确定表达式的评估结果存储在虚拟列中,那么数据库服务器实例100用对隐藏的虚拟列的引用来替换对该表达式的引用。作为示例,如果表达式“(a+c+b)”的子表达式“(a+b)”已经被具体化为隐藏的虚拟列“v”,那么数据库查询“select a+c+bfrom t where a>0”可以被重写为“select v+c from t where a>0”。在查询执行期间,直接从IMEU读取“v”的值,从而取得PCR并避免重新评估子表达式“(a+b)”。
图4是绘出根据实施例的、用于识别和使用存储器中表达式以优化查询执行的示例过程的流程图。该处理可以由一个或多个前台进程(诸如查询进程142)执行。在步骤402,数据库服务器实例100接收数据库查询。数据库查询可以由用户直接输入、通过网络从数据库客户端接收,或通过某个其它应用提交。
在步骤404,数据库服务器实例100识别被包括在数据库查询中的、可能潜在地被具体化在存储器中区域120内的表达式。作为示例,查询:“select a*b from T where c=1and e/f=10”有两个可以潜在地在IMEU中具体化的表达式:“a*b”和“e/f”。如本文所使用的,“识别出的表达式”可以指明确记载在查询中的表达式、隐式表达式或从表达式的结果得出的先前定义的虚拟列。如果识别出的表达式与隐藏的虚拟列相关联,那么该数据库查询可以被重写为访问如前所述的隐藏的虚拟列。
在步骤406,数据库服务器实例100基于识别出的表达式来确定是否更新ESS 150。在一些实施例中,表达式跟踪可以不被启用、可以仅对某些表达式启用,或者可以不被支持。在其它实施例中,表达式跟踪可以被应用于所有识别出的表达式或其某个子集。如果数据库服务器实例100决定更新ESS 150,那么该过程继续到步骤408。如果数据库服务器实例100确定不应当跟踪识别出的表达式,那么该过程继续到步骤410。
在步骤408,数据库服务器实例100基于识别出的表达式在查询内的发生来更新ESS 150。为了查询和更新ESS 150,数据库服务器实例100以每个表为基础为每个不同的表达式生成表达式标识符。表达式ID可以基于表达式的文本表示的规范形式来计算。例如,对于特定的表,表达式“a+b”和“b+a”被认为是同一表达式。表达式ID可以是表达式的规范表示的散列值以及唯一地识别该表达式的基础表对象编号或某个其它值。如果在ESS 150中不存在用于识别出的表达式的条目,那么可以创建新的表达式条目。否则,可以基于为表达式收集的编译时和/或运行时信息来更新现有条目。
在步骤410,数据库服务器实例100扫描存储器中区域120,以确定IMEU 124a到124n是否包括存储针对由数据库查询引用的识别出的表达式的结果的任何VCU。为了执行该扫描,数据库服务器实例100可以基于由数据库查询引用的列来组装IMCU和IMEU的集合。组装IMCU和IMEU可以涉及对IMCU中的CU和IMEU中的VCU进行解压缩(如果它们被压缩了的话),并且针对由数据库查询引用的列和表达式来聚集(gather)CU和VCU。在实施例中,数据库服务器实例100针对具有与识别出的表达式相关联的列编号的VCU来扫描IMEU 124a至124n。如果识别出存储有针对识别出的表达式的结果的VCU,那么该过程继续到步骤412。如果没有识别出VCU,那么该过程继续到步骤414。
在步骤412,数据库服务器实例100从一个或多个VCU中取得针对识别出的表达式的评估结果。在一些情况下,由于存储器约束或由于行无效,只有一部分结果可以被高速缓存。在这种情况下,数据库服务器实例100可以取得结果中有效并且高速缓存在一个或多个VCU内的一部分。对于无效或未高速缓存的部分,使用来自事务日志、盘或某个其它源的值来评估表达式。如果整个表达式结果被高速缓存并且有效,那么该过程可以继续进行而不对识别出的表达式执行任何评估。
如果不存在存储针对识别出的表达式的结果的VCU,那么在步骤414,数据库服务器实例100计算PCR。如果操作数列被存储在IMCU 122a至122n内的一个或多个列单元中,那么可以从存储器中区域120中取得操作数列的值,以执行计算。如果值不存储在存储器中,那么数据库服务器实例100从另一个源(诸如事务日志或盘)取得这些值。
在步骤416,数据库服务器实例100确定是否存在尚未被评估的任何识别出的表达式。如果是,那么该过程返回到步骤410并针对下一个识别出的表达式重复步骤410到414。一旦所有识别出的表达式都已被评估,该过程就继续到步骤418。
在步骤418,数据库服务器实例100针对每个识别出的表达式使用从存储器中区域120取得的PCR或者根据以上描述计算的PCR来生成并返回最终查询结果。
存储器中的内部单元
如前所述,IMEU 124a至124n可以用于将PCR和/或用户定义的虚拟列具体化在存储器中区域120内,以用于扫描期间的后续重复使用,从而提供更快的查询响应时间。数据库服务器实例100还包括IMIU 126a至126n,其具体化不适合作为VCU存储的计算,如下面进一步详细描述的那样。虽然数据库服务器实例100被描绘为具有IMEU和IMIU两者,但是在其它实现方案中,数据库服务器实例可以包括IMEU但不包括IMIU或者包括IMIU而不包括IMEU。
在实施例中,IMIU 126a至126n中的每一个作为具有固定上限尺寸的存储器中高速缓存进行管理,所述上限尺寸可以按照每个IMCU按需分配。类似于IMEU 124a至124n,IMIU 126a至126n存储内部计算的结果。但是,IMIU 126a至126n的结构与IMEU不同,并且在可以存储的结果类型方面提供更大的灵活性。如前所述,IMEU将结果存储为VCU,其中行与父IMCU中的CU具有一对一的关系。这种格式便于事务处理,因为VCU可以被视为在逻辑上扩展由父IMCU高速缓存的表行。某些表达式(诸如某些数据转换、散列操作等等)可以不与由父IMCU高速缓存的行具有一对一映射。对于这种计算,结果可以代替地被存储在IMIU中。为了组织PCR,IMIU 126a至126n维护将计算标识符映射到具体化的结果的结果映射。因此,IMIU 126a包括结果映射138,其可以被实现为如下面进一步详细描述的散列表。类似地,IMIU 126b和126n可以包括结果映射,以管理具体化的计算结果。
图5绘出了根据实施例的用于IMIU的示例设计。IMIU 500一般包括头部502、IMIU分片图(piecemap)504、计算的散列表506和具体化的结果区域(MRA)508。
头部502存储用于管理IMIU 500内的空闲空间的信息。在实施例中,头部502可以包括但不限于:
·指向应当存储位向量结果的空闲空间的指针(向前分配);
·指向应当存储得出列结果的空闲空间的指针(向后分配);和/或
·一个或多个值,指示用于任一类PCR(例如,位向量、得出列)的可用空闲空间的量。
分片图504存储指向可以位于存储器的其它区域中的IMIU扩展片(如果有的话)的指针数组。如果头部IMIU片完全被具体化的结果消耗,那么数据库服务器实例100可以分配更多的存储器并构造链IMIU片来存储附加的计算。因此,IMIU高速缓存的尺寸可以增长或缩小。
计算的散列表506对关于针对父IMCU而被处理的计算的统计信息进行跟踪,并且,如果被具体化则用作结果映射的计算ID,从而提供指向IMIU中存储的计算结果的指针。计算的散列表506内的每个散列桶可以存储信息,以便于内部的计算跟踪和查找。这种信息可以包括但不限于:
·用于应对对散列桶的并发访问的比较和交换(CAS)值;
·与内部计算相关联的类型;
·运行评估计数,其跟踪内部计算已被评估了多少次(被修剪掉的计算不影响这个计数值)
·运行访问计数,其跟踪内部计算被引用/访问了多少次(针对父IMCU的计算无论是否被修剪掉都会被计数)
·识别上次内部计算被最后评估的时间戳;
·识别上次内部计算被最后访问的时间戳;
·与评估内部计算相关联的静态成本;
·与评估内部计算相关联的运行成本;
·存储的结果指针,其指示存储内部计算的结果的存储器位置;以及
·读取者计数,用于指示多少进程当前在读取散列桶。
MRA 508存储用于内部计算的结果。PCR可以存储不同类别的结果,包括但不限于位向量结果和得出列结果集合。在一个实施例中,位向量结果从MRA 508的起始地址填充并向前分配。得出列或其它结果集合从MRA 508的结束地址填充并向后分配。将结果集合分离可以有助于减少碎片化,因为位向量结果可以以固定尺寸进行管理,从而允许位向量被替换而不会造成结果集合之间的间隙。
要在IMIU中具体化的计算
IMIU 126a至126n提供了在可以在存储器中区域120内具体化的计算类型方面的高灵活性。由于这种灵活性,被高速缓存的结果的格式可以取决于被具体化的计算的特定类型而变化。PCR的示例可以包括但不限于
·在谓词评估期间得出的位向量;
·列上的函数评估结果(诸如散列函数、数据类型转换、表达式评估的结果);
·用于多列联接的级联列;以及
·对字典值、列编号和其它元数据值的函数评估结果(诸如数据类型转换)。
在谓词评估期间得出的位向量存储位的集合,其中每个位的位置与不同的行对应,并且每个位的值指示对应的行是否满足该谓词。例如,如果针对对照表t中的五个行评估谓词表达式“e/f=10”,那么可以生成五个位的位向量并将其高速缓存在MRA 508中,以指示表t的哪些行在列e和f中具有满足谓词表达式的值。在本示例中,可以存储位向量“10110”,以指示表t的第一行、第三行和第四行满足该谓词,而第二行和第五行不满足该谓词。高速缓存位向量允许将后续查询重写为简单地参考位向量而不是执行可能成本高昂的评估。
散列值是可能具有高速缓存的价值的另一个内部计算结果。为了进行说明,表2绘出了“what if”查询的示例,该查询确定,如果对于少量的某些部分不再填充订单将损失多少年平均收入。
表2:可以在其中执行散列计算的样本查询
在Q5中,“lineitem”是事实表,并且“part”是维度表。优化器可以挑选散列联接来评估该查询。当两个表经由散列联接被联接时,维度表将被扫描,并且对于该表满足where子句谓词的行被用于基于联接键在存储器中创建散列表。然后更大的事实表被扫描并且,对于该表满足where子句谓词的行,在联接列上执行相同的散列算法。然后联接操作针对每个值探测先前构建的散列表并且,如果存在匹配,则返回该行。在一些情况下,可以使用bloom过滤器来执行散列联接操作。bloom过滤器是可以被用于测试元素是否是集合的成员的空间高效的概率数据结构。在为维度表创建散列表期间,也基于联接列(在Q5的情况下为“p_partkey”列)创建bloom过滤器。bloom过滤器随后作为附加谓词发送到对“lineitem”表的扫描。在将“where”子句谓词应用于“lineitem”表之后,通过在bloom过滤器中对联接列“(l_partkey)”进行散列和探测来进一步修剪所得的行集。如果在bloom向量中找到匹配,那么该行将被发送到散列联接运算符。如果没有找到匹配,那么该行被丢弃。接下来,来自事实表和维度表的通过的行(passing row)被用于执行实际的联接。这涉及将来自“lineitem”的通过的行的“l_partkey”的散列与来自“part”的通过的行的“p_partkey”的散列进行比较,以从Bloom过滤器评估中除去假阳性(false positive)。最后的行集合被发送到聚合器,以执行求和。基于上述内容,有充分的机会对联接键列的不同字典条目的值进行散列,并重用它们来改进联接性能。对于事实表“lineitem”上的通过该谓词的行,对联接键列“l_partkey”的字典索引执行查找,以直接从具体化的流中获得散列值并用它来探测bloom过滤器。这导致具有主导bloom过滤器评估成本的联接的显著加速,因为在运行时期间计算散列值的成本可以被完全消除。另外,长度固定(例如,8字节)的散列值可以作为对准的数据流被高速缓存在IMIU内。通过确定存储散列值的流的开始位置并直接访问该流,可以完成散列操作,而不用查找字典符号及其长度。
根据实施例,IMIU也可以对级联的列进行高速缓存。表3绘出了可以受益于对级联的列进行高速缓存的示例查询。
表3:在其中列级联的样本查询
Q6有效地具有两个单列联接。传统上,通过对第一联接操作(T1.id=T2.id)执行bloom过滤器操作来修剪行,并且随后对从第一操作通过的行执行第二bloom过滤器操作(T1.name=T2.name)以修剪掉更多的行。如前面所讨论的,通过将联接键列的散列值具体化在IMIU中,可以改进单列联接。相同的技术可以对Q6应用两次,以改进查询性能。但是,对在多列联接中涉及的两个表中的每个表的列进行内部级联可以改进分析工作负载的查询性能。对于“T1”,内部列是“(IC1=T1.id o T1.name)”,而对于“T2”是“(IC2=T2.id oT2.name)”。在经级联的列中,查询可以在内部被重写为如下:“select*from T1,T2whereT1.IC1=T2.IC2”。因此,原始的多列联接查询可以被缩减为单列联接查询。
在实施例中,IMIU可以被用于对十进制缩放的二进制(decimal scaled binary,DSB)表示进行高速缓存。DSB表示包括DSB向量和DSB元数据。DSB向量是DSB值的数组,它是通过公因子缩放的本地整数。DSB元数据描述DSB向量的特性并且可以包括以下元数据:
·每个数组元素的宽度;
·指数,指示小数点右侧基数-100的位数;
·数组的最小值和最大值;以及
·指示要忽略的行的位向量。
DSB向量可以被用于表示不同的值,诸如存储定点数和浮点数的列的字典值。IMIU中的条目可以被用于存储DSB向量和上面列出的相关联的元数据。对于算术计算(例如,“a+b”),可以通过查找每个值的字典条目来获得“a”和“b”的值的列表。对于特定的IMCU,对于列“a”和“b”的字典值,DSB值可能存在也可能不存在。如果它们在IMIU中存在,那么可以取得这些DSB值来代替定点列值或浮点列值。因为可以用DSB值更快地执行算术运算(由于不需要浮点指令),所以可以改进查询处理。DSB转换不仅可以针对物理列也可以针对具体化的表达式列被高速缓存。例如,如果虚拟列“v”等于物理列“a”和“b”的和,那么潜在地被具体化在IMEU中的列“v”的唯一值的DSB表示可以被存储在IMIU中。因此,可以重写“select A+B+C from table”形式的查询,以有效地执行“DSB(V)+DSB(C)”,从而改进查询响应时间。这是在其中IMEU和IMIU可以一起工作以改进单次查询的执行的示例。
散列计算
内部计算被映射到计算的散列表506的方式可以随实现方案而异。每个内部计算可以基于该计算的PCODE表示、该计算的谓词日志树和/或内部计算的某个其它唯一表示来被散列。例如,内部计算的PCODE表示通常包括:a)操作码(opcode)、b)列操作数(在一些情况下具有用于列的数据类型)和c)常量操作数(作为长度/值对)。散列值可以通过将散列函数应用于包括在PCODE表示中的值的组合来获得。一些示例是:
·HASH操作码、第1列、常量数据、常量数据长度
·HASH操作码、类型、第1列
散列运算符还可以组合用于两个或更多个不同表示的散列值,以得出用于嵌套/复杂的内部计算的散列值。例如,以下命令基于散列值的组合来计算散列值:
·HASH操作码、hashval1、hashval2
为了演示内部计算的散列,下面的多列谓词以举例的方式给出:“c=1and e/f=10”。为了将这个计算映射到计算的散列表506内的对应桶,可以执行以下命令序列:(1)HASH(EQ,c,1);(2)HASH(EQ,HASH(DIV,e,f),10);和(3)HASH(AND,hashval1,hashval2)。第一个命令与对子表达式c=1的散列对应,并且所得的散列值被保存为“hashval1”。第二个命令与对子表达式“e/f=10”的散列对应,并且所得的散列值被保存为“hashval2”。第三个命令通过将散列函数应用于“hashval1”和“hashval2”的组合来评估完整的谓词。用于每个表达式和子表达式的散列值映射到计算的散列表506内的对应散列桶,并且可以被用于执行在其中维护的计算信息的查找和更新。
要在IMIU中具体化的候选计算
为了节省存储器,数据库服务器实例100可以限制针对每个IMIU在MRA内跟踪和存储哪些内部计算。数据库服务器实例100可以采用试探法(heuristics)的集合来构建选择标准的集合。满足选择标准并且被认为有资格存储在IMIU中的计算此后被称为“候选计算”。可以在选择过程中涉及的因素可以包括但不限于:
·评估的频率;
·评估的运行时成本;
·如果被具体化,计算的存储器占用量;以及
·高速缓存和/或整个系统所经历的存储器压力。
根据实施例,基于在计算的散列表506中存储的选择标准和统计信息,每个内部计算被赋予得分。如果得分满足阈值,那么选择该内部计算以用于具体化。如果得分不满足阈值,那么计算结果不在MRA 508内具体化。即使不在MRA 508内具体化,IMIU 500也可以在计算的散列表506内继续跟踪用于内部计算的统计信息。
为候选表达式计算得分的方式可以取决于特定的实现方案而变化。例如,用于计算得分的表达式的运行时成本可以基于评估计算所花的CPU周期的数量、由被过滤的行的数量除以被评估的行的数量所确定的谓词的过滤比率、或者直接绑定到评估内部计算的资源消耗的某个其它度量。一般而言,随着运行成本和评估频率的增加,内部计算的得分可以更高,并且,随着这些因素的降低,内部计算的得分更低。
用于确定是否具体化候选表达式的阈值还可以取决于各种因素而变化。作为示例,对于不同类型的计算,阈值可以不同。例如,随着存储器压力的增加,用于具体化表达式的阈值也会增加。另外,由于位向量所消耗的相对较小的存储器占用,谓词可以具有降低的阈值。在另一个示例中,不同类型的谓词之间的阈值可以不同。例如,谓词结果可以包含复杂的子谓词结果而不需要附加的成本,并且高速缓存谓词结果可以允许谓词重新排序的更多机会。另一方面,如果谓词的常量值改变,那么整个存储的结果变得无用。这些属性可以在设置阈值得分或者以其它方式选择用于具体化的谓词和其它计算时被考虑。
根据实施例,选择候选计算以进行具体化的粒度可以基于计算的类型而变化。一些计算(诸如谓词评估)可以以每个IMCU为基础来选择。作为示例,如果形式为“col=<value>”的谓词从不针对特定的IMCU进行评估(因为它总是被min-max修剪(即,指定的值不在父IMCU中的该列的最小值和最大值范围内)被修剪掉),那么将这个谓词存储在用于父IMCU的IMIU中将是对空间的浪费。因此,可以以每个IMCU为基础执行选择,使得基于针对父IMCU评估谓词的可能性来对谓词进行高速缓存。另外,谓词结果可以针对一个IMCU中的列值而不针对另一个IMCU中的列值被具体化。
在其它情况下,可以以每个表为基础执行计算。例如,用于联接键列的散列值和列上的数据转换一般被应用于列内的所有值。如果选择这种候选计算以用于具体化,那么可以针对高速缓存来自表列的数据的所有IMCU,来对结果进行高速缓存。
计算的具体化
一旦选择了用于在IMIU 500内具体化的候选计算,下一个任务就是用计算结果填充IMIU 500。在一个实施例中,计算结果在查询执行期间由前台进程填充。通过使用前台进程,要具体化的计算结果容易获得,因为它们是作为触发具体化的查询的评估进程的一部分被计算的。为了具体化计算,查询进程将计算结果复制到MRA 508中、调整头部502中的空闲空间指针,并且在内部计算的散列表506内更新散列表条目中与这个计算对应的结果指针,使得该结果指针映射到MRA 508中存储的结果的开始。
在具体化期间,如果没有足够的存储器可用于存储结果,那么可以为IMIU 500分配另一个存储器中延伸区(连续的存储器块)。被分配用于该存储器中延伸区的存储器的量可以是缺省的量、基于已经存储在MRA 508中的结果所消耗的存储器的量来选择,或者基于某个其它标准来确定。一旦被分配,结果就被写入新的存储器中延伸区,并且分片图504被更新以显示IMIU的链。
一旦被具体化,MRA 508中的结果就可以被后续的查询访问。计算的PCODE表示或其它表示可以在散列表中以每个IMCU为基础进行散列和探测。如果与计算对应的结果存在于MRA 508中,那么指向MRA 508中的该结果的指针作为计算的散列表506中的单独条目而存在。如果指针存在,那么查询可以被查询为直接从MRA 508访问结果而不是在查询执行期间执行计算。
逐出计算
为了释放IMIU 500内的空间,数据库服务器实例100可以从MRA 508逐出内部计算结果。为了选择要逐出哪些计算,数据库服务器实例100可以使用一个或多个高速缓存替换策略的集合来识别已经变“冷门”的计算。示例高速缓存替换策略可以包括但不限于:从存储器中逐出最近最少访问或评估的表达式的最近最少使用(LRU)策略、逐出最不频繁评估或访问的计算的最不频繁使用策略、随机选择要逐出的计算的随机替换策略、基于指示上次计算被访问的时间的虚拟时针(迭代器)来逐出结果的具有自适应替换的时钟(CAR)策略、以及基于为具体化的计算维护的统计信息计算得分并逐出具有最低得分的计算的基于得分的排名。逐出较冷门的计算或者可以在新计算进入时即时完成,或者可以作为专用逐出通次(pass)的一部分来完成,以尝试在存储器压力的情况下回收空间。
当计算结果从MRA 508中被逐出时,结果指针从计算的散列表506中被删除,并且在头部502和/或分片图504中更新空闲空间指针,以反映新分配的空闲空间。计算结果也可以从MRA 508中移除或者可以被保留并被后续的计算结果覆写。
由于位向量尺寸可以完全相同并且任何后续的位向量具体化都可以替换IMIU500中未被占用空间,因此可以执行逐出位向量结果而没有碎片化。但是,由于其他计算的可变尺寸,所以这些计算的逐出可能导致IMIU 500中的碎片化。为了改善这种效应,可以执行去碎片通次,在去碎片通次中,在逐出之后将MRA 508中的存储的结果混洗以确保最佳的空间利用。逐出通次可以由专门的后台进程执行,以防止前台查询遭受性能下降。
在高存储器压力的情况下,数据库服务器实例100可以从存储器中区域120中完全逐出整个IMIU。一旦被逐出,分配给该IMIU的存储器延伸区就被释放回到空间层,空间层可以将这些延伸区分配用于不同的用途。高存储器压力可以被检测为:
·计算的散列表中的表达式与MRA中具体化的结果的高比率;
·IMIU尺寸超过阈值级别,其中阈值级别可以是可配置的参数;以及
·整体系统存储器可用性低。
IMIU的一致性维护
在IMIU 500中具体化的计算是基于存储在父IMCU中的值。对于与表的行具有一对一映射的计算来说,与谓词位向量结果的情况一样,在相关联的SMU中维护的有效性位向量可以被用于识别谓词位向量中的哪些位是陈旧的。例如,在SMU 128a中维护的位向量可以被用作针对存储在MRA 136中的谓词位向量结果的掩码,以获得用于在IMCU 122a中有效的行的正确结果。
但是,MRA 136还可以存储不具有一对一行映射的计算。对于这种计算,确定有效性的方式取决于被高速缓存的结果的性质。作为示例,如果DSB值被高速缓存在MRA 136内,其中DSB值是针对存储浮点数的列的不同条目,那么在IMCU 122a的扫描期间,进程可以针对有效行的字典条目从具体化的结果中获得DSB值。对于无效的行,不从IMIU 126a访问结果。相反,可以使用结果的非DSB编码来评估计算。
用于IMIU的并发操作
当访问存储在IMIU 500中的数据时,特定的查询进程可以具有不同的角色。例如,查询进程可以充当以下角色:
·更新计算的散列表506中的特定计算的统计信息的写入者;
·使用来自MRA 508的具体化的结果来获得最终查询结果的读取者;以及
·将计算结果具体化在MRA 508中和/或逐出已经被具体化在MRA 508中的计算的写入者。
具有各种角色的多个进程可能并发地尝试访问IMIU。为了管理潜在的冲突,数据库服务器实例100可以实现并发策略的集合。示例并发策略可以包括但不限于:
·允许两个或更多个进程充当读取者来并行地访问MRA 508中的不同的具体化的结果;
·当充当读取者的多个进程尝试并行访问相同的具体化的结果时,复制结果指针,由此可以并行访问所存储的结果;
·防止多个进程将相同的计算结果添加到MRA 508;
·当多个进程尝试并发地具体化不同的计算时,对到MRA 508的写入进行序列化;
·防止多个进程从MRA 508逐出同一个计算;
·当该计算上存在现有的读取者时,防止进程从MRA 508中逐出具体化的结果;
·当多个进程正尝试从MRA 508中逐出不同的计算时,对具体化的计算的逐出进行序列化;
·当多个进程并发地尝试更新散列表条目时,对对计算的散列表506中的同一散列表条目中的统计信息的更新进行序列化;以及
·当不同的进程正在写入散列表条目中的结果指针字段时,防止读取者访问该结果指针。
根据实施例,通过使用原子CAS操作来维护IMIU 500上的并发性。散列表条目中的CAS字段的缺省值(例如,“0”)被设置为指示该散列表条目未锁定。当进程尝试访问散列表项时,进程尝试将CAS值更新为自己的进程ID,以便原子地锁定对散列条目的访问。可以阻止对特定计算的散列表条目的访问,直到CAS操作成功。因此,对特定散列表条目的更新可以被限制为一次一个进程。
具体化新的计算涉及潜在地改变空闲空间指针、获得新的链式单元并更新分片图,以及逐出较冷门的计算。为了维护并发性,可以实现闩锁机制(latching mechanism),以便每当新的计算被添加时保护到MRA 508的写入。甚至在被闩锁时,读取者仍然可以被允许通过使用原子CAS操作来读取其它计算。
当逐出计算时,可以通过在从MRA 508逐出所选计算之前检查读取者来维持并发性。如果存在使用特定的具体化的结果的读取者,那么,在用于计算的读取者计数指示不再存在读取该计算结果的任何进程之前,该结果不被逐出。可以通过每当存在使用特定的具体化的结果的进程就递增读取者计数值来维护读取者计数值。为了递减读取者计数,读取者使用CAS对用于计算的散列条目采取原子锁定并更新该值。以这种方式,可以处置希望逐出计算的写入者与正在读取结果的读取者之间的并发性。
在一些系统中,进程有可能在读取计算结果时死亡。如果读取者计数已经增加,那么,随着进程的死亡,存在如下风险:即使没有活动进程正在实际使用结果,计数器也不会递减回到0。在这种系统中,除读取者计数之外,还可以维护读取特定计算结果的进程的列表。因此,如果想要逐出计算的进程已经等待了阈值时间段,那么该进程可以检查该列表,以查看是否存在任何死进程。如果找到这种过程,它将从列表中被移除,并且读取者计数被适当递减,从而允许逐出继续进行。
用于管理IMIU的示例数据流
图6是绘出根据实施例的、用于用计算结果填充存储器中内部单元并使用具体化的计算结果来优化查询处理的示例过程的流程图。在实施例中,该过程由属于数据库服务器实例100的一个或多个前台进程执行。通过使用前台进程,当计算正在被评估时,IMIU可以在查询执行期间被更新和填充。参考图6,在步骤602,计算i的表示被散列。散列可以被应用于如前所述的PCODE表示、谓词日志或某种其它计算表示。响应于对计算表示进行散列,生成识别计算的散列表506内对应条目的散列值。
在步骤604,获得对用于i的散列表条目的锁。如前所述,进程可以通过更新散列表条目的CAS字段内的值来获得锁。一旦被锁定,其它进程就被阻止更新条目内的值。其它进程可以并发地更新计算的散列表506内的不同条目。但是,单个散列表条目一次只被一个进程更新。
在步骤606,在用于i的散列条目中更新计算统计信息。例如,可以基于在查询评估期间收集的运行时信息来更新评估计数、访问计数、上次评估的时间戳、上次访问的时间戳以及评估成本统计信息。
在步骤608,前台进程确定结果指针在散列条目内是否可用。如果在散列条目中存储有结果指针,那么用于计算i的结果在MRA中被具体化,并且该过程继续到步骤610。否则,如果指针不存在(例如,其被设置为NULL),那么对于该计算,结果还没有被具体化。因此,该过程继续到步骤616。
在步骤610,前台进程使读取者计数递增并释放用于散列表条目的锁。读取者计数指示进程当前正在访问用于计算i的具体化的结果以防止其它进程逐出该计算。但是,随着散列表上的锁被释放,其它进程可以更新散列表条目(除了结果指针)。
在步骤612,进程从由结果指针识别出的MRA中的位置读取具体化的结果,并使用该具体化的结果来计算最终的查询结果。最终查询结果的计算可以涉及多个内部计算和表达式评估。因此,进程可以检查IMIU和/或IMEU以获得其它经高速缓存的结果,以计算最终的查询结果。一旦进程已经完成从MRA访问结果,进程就再次获得用于计算i的散列表条目上的锁。
在步骤614,进程递减读取者计数,以指示其不再从MRA访问计算结果。在读取者计数递减之后,进程释放用于计算i的散列条目上的锁。
如果计算结果未被高速缓存在MRA中,那么进程确定是否应当对该结果进行高速缓存。因此,在步骤616,基于用于计算i的散列表条目中维护的统计信息来计算“热度”得分。如前所述,计算得分的方式可以取决于各种因素。
在步骤618,进程确定用于计算i的得分是否超过阈值。如果没有超过,那么该过程继续到步骤624。否则,该过程继续到步骤620。
如果用于计算i的得分没有超过阈值,那么结果不被具体化。因此,在步骤624,进程释放用于计算i的散列表条目上的锁,从而允许其它进程修改该条目,并且该进程计算计算结果。为了计算计算结果,该进程可以从IMCU、从事务日志和/或从盘访问操作数值。
如果用于计算i的得分超过阈值,那么进程开始在IMIU内具体化计算结果的任务。在步骤620中,进程获得IMIU排他锁存器(latch)并释放用于计算i的散列表条目上的锁。该锁存器阻止其它进程对IMIU中的头部、分片图和MRA进行更新。
在步骤622,进程确定IMIU中是否有空闲空间。如果IMIU中没有足够的空闲空间来存储计算结果,那么该过程继续到步骤626,以分配或释放更多的空间。否则,该过程继续到步骤632。
在步骤626,进程确定是否分配IMIU链片。可以基于各种因素来确定是否分配新的链片,这些因素诸如存储器压力、IMIU的最大尺寸阈值等等。如果进程确定应当分配附加的IMIU片,那么该过程继续到步骤628。否则,该过程继续到步骤630。
如果进程确定另一个IMIU链片应当被添加到IMIU,那么在步骤628,进程分配IMIU链片。如前所述,进程可以从空间管理层请求一个或多个存储器中空间延伸区的集合。一旦被分配,IMIU的分片图就被更新,以示出IMIU的链。
如果进程确定不应当分配另一个IMIU链片,那么在步骤630,进程逐出计算,以释放存储器中用于计算结果的空间。为了逐出列,进程可以首先基于如前所述的替换策略来识别要逐出的“冷门”计算。如果用于识别出的计算的读取者计数指示另一个进程当前正在访问该计算,那么进程可以等待以逐出该计算或选择另一个冷门计算来逐出。如果读取者计数指示计算没有被另一个进程访问,那么进程从MRA中移除计算结果、从用于被逐出的计算的散列表条目中删除结果指针,并且释放用于该散列表条目的原子锁。如果需要,那么该进程还更新头部和/或分片图中的空闲空间指针,以反映新释放的空间。
一旦在IMIU中有足够的空闲空间来具体化计算结果,进程就在步骤632获得用于i的散列表条目上的锁。
在步骤634,评估计算以获得结果,然后将该结果写入MRA。为了计算计算结果,进程可以从IMCU、从事务日志和/或从盘访问操作数值。
在步骤636,进程在用于i的散列表条目中添加结果指针并释放锁。该指针可以识别计算结果存储在MRA内的起始存储器地址。
在步骤638,如果需要,IMIU的头部和/或分片图中的空闲空间指针被更新,并且IMIU锁存器被释放。在这个步骤之后,其它进程可以从MRA访问并使用具体化的计算结果。随着各种数据库查询被接收和处理,这些查询可以被重写为直接从MRA访问结果而不是再次重新评估计算。
存储器中统计信息存储库
如前所述,计算的散列表506在每个IMCU级别上对计算进行跟踪。通过在这个粒度级别上进行跟踪,可以以IMCU为基础来执行对要具体化哪些结果的选择。但是,与在更高的粒度级别(诸如在每个表的基础上)上进行跟踪相比,在每个IMCU基础上进行跟踪涉及稍多的开销。此外,如果数据在不同的IMCU之间均匀散布,那么可以在查询执行期间跨所有IMCU评估相同的计算。因此,在一些情况下,在每个表的级别上对计算使用情况进行跟踪会是有益的。
为了在每个表的级别上对计算进行跟踪,可以在每次起动存储器中数据库实例时创建存储器中区域120内的专用区域。专用存储器(在本文中被称为存储器中统计信息存储库(IMSS))与IMIU 126a至126n分开维护,并被用于以每个表为基础来跟踪计算统计信息。因此,IMSS可以收集跨多个IMCU存储的数据的统计信息。然后可以使用IMSS内的数据来驱动IMIU 126a至126n的分配、填充和维护。
IMSS可以包含按照计算id(谓词日志树或PCODE字节流)和基本表对象标识符而散列的计算的散列表。类似于IMIU 126a至126n中的散列表,IMSS散列表可以跟踪每个计算的若干属性,诸如上次评估的时间戳、评估次数的运行计数、平均运行时评估成本、特定于计算的元数据等等。IMSS可以被卷入ESS 150并作为单个单元被维护,以形成更通用的数据库统计信息储存库(DSR)。
可以执行类似的并发控制操作,以避免当多个进程尝试访问IMSS时可能出现的冲突。IMSS可以与每个IMCU级别的跟踪结合使用,或者可以被实现为IMCU级别的跟踪的替代方案。例如,当数据库服务器实例初始起动时,IMCU 122a至122n和IMIU 126a至126n可以逐渐被构建。在构建阶段期间,IMSS可以充当计算的统计信息储存库,并且可以被用于在IMIU变得可用时引导(bootstrap)IMIU中的散列表。如果由于任何原因IMCU不可用(被丢弃或重新填充),那么统计信息可以继续在IMSS中被跟踪。然后可以使用这些统计信息来预填充新IMIU中的散列表。在存储器压力下的繁重分析的情况下,IMSS和计算的散列表的组合也可以是有用的。进程可以开始在每个IMCU级别对计算进行跟踪但随着时间的推移最终恢复到表级别的跟踪,以降低存储器压力。
谓词重新排序
根据实施例,在IMIU中高速缓存的结果可以被考虑到谓词重新排序优化中。利用经高速缓存的谓词结果的谓词可以被移动以用于更早的评估,以在一些情况下改进运行时性能。例如,如果子句“where c=1and d=2and e/f=10”中的谓词按它们在数据库查询中出现的次序进行评估,那么将首先评估谓词“c=1”接着是“d=2”,最后是“e/f=10”。但是,如果谓词“e/f=10”的结果被具体化在存储器中,那么可以对谓词进行重新排序,使得在评估“c=1”和“d=2”之前评估“e/f=10”(即,通过从IMIU获取表达式结果)。如果谓词“e/f=10”还过滤掉了许多的行,那么接下来的两个谓词会潜在地针对较少数量的行进行评估。
查询中的每个谓词可以具有不同程度的选择性。例如,一个谓词可以过滤掉不同于另一个谓词的数量的行。当识别要在IMIU中具体化的谓词结果时,可以基于选择性来选择谓词,以存储高度选择性的谓词(高过滤比率)的位向量结果。在查询执行期间,谓词可以被重新排序以评估高度选择性的谓词,这些谓词具有在IMIU中可用的经高速缓存的结果的可能性较高。如果被高速缓存,那么直接从IMIU获得结果,从而减少针对后续谓词评估的行的数量。因此,选择高度选择性的谓词来高速缓存与谓词的重新排序耦合可以显著改进查询性能。
附加的查询处理优化
将热门的表达式或用户定义的虚拟列具体化在VCU中的存储器中可以通过不仅避免重复的表达式评估而且为扫描引擎提供更高效地使用向量处理技术的能力来改进扫描性能。在支持向量处理的系统中,指令可以对被称为向量的数据数组进行操作,而不限于每个指令对单个数据项进行操作。示例向量处理技术被称为单指令多数据(SIMD)处理,其中单个指令可以使得同时在多个数据集合上执行相同的操作。
具体化的IME可以通过允许多列表达式评估被视为单列表达式评估来便于向量处理。一旦进程对单个列进行操作,向量就可以更容易地形成,从而减少存储器和/或盘访问的次数。例如,利用单列单元具体化多列表达式的结果,可以使用单个字典来存储所有列的不同值。与在操作中涉及两个字典时相比,这减少了执行的聚集操作和随机存储器引用的次数。
为了演示具体化的表达式如何更适合于向量处理,考虑具有谓词“a+b=10”的查询。两列“a”和“b”是分开的列,这两个列具有它们自己的字典(本文中分别被称为“D1”和“D2”)。如果表达式没有具体化成单个虚拟列,那么在表达式评估期间,对于每个行,在对结果与值“10”进行比较之前,针对D1中的某个符号和D2中的某个符号计算“a+b”。为了在没有IME的情况下向量化这个操作,将执行第一聚集操作以从D1取得用于列“a”的N个随机符号,以及执行第二个不同的聚集操作从D2取得用于列“b”的N个随机符号。然后,使用各自有N个符号的两个向量来执行向量相加操作,以获得这N个行的“a+b”的值。随后,将相加操作的结果与其中有N个值“10”的向量进行比较。聚集操作成本非常高昂,因为随机存储器引用在两个字典中执行。因此,向量化多列表达式评估的过程可能相当繁重。在使用IME的情况下,“a+b”表达式可以被具体化成单个VCU。使用该VCU,该相等性谓词可以以更简单和高效的方式被向量化。例如,可以执行单次加载以在数据流中取回N个符号而不经过字典并且不执行随机存储器访问以获得符号。然后,可执行单个比较操作,以将该向量与有N个值“10”的向量进行比较。数据流向量上的负载是按顺序完成的,因此硬件将预先取回其值,从而允许处理器在存储器带宽速度附近或以存储器带宽速度进行操作。
硬件概述
在一些实施例中,本文所描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行所述技术,或者可以包括诸如被永久性地编程以执行所述技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)的数字电子设备,或者可以包括被编程为按照固件、存储器、其它储存器或者其组合中的程序指令执行所述技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程组合来实现所述技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑来实现所述技术的任何其它设备。
例如,图7是图示本发明的实施例可以在其上实现的计算机系统700的框图。计算机系统700包括总线702或者用于传送信息的其它通信机制,以及与总线702耦合用于处理信息的硬件处理器704。硬件处理器704可以是例如通用微处理器。
计算机系统700还包括耦合到总线702用于存储信息和要由处理器704执行的指令的主存储器706(诸如随机存取存储器(RAM)或其它动态存储设备)。主存储器706还可以用于在要由处理器704执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器704可访问的非暂态存储介质中时,这种指令使计算机系统700变成为执行指令中所指定的操作而定制的专用机器。
计算机系统700还包括耦合到总线702的只读存储器(ROM)708或者其它静态存储设备,以用于为处理器704存储静态信息和指令。提供了存储设备710(诸如磁盘、光盘或固态驱动器),并且将其耦合到总线702,以用于存储信息和指令。
计算机系统700可以经由总线702耦合到显示器712(诸如阴极射线管(CRT)),以用于向计算机用户显示信息。输入设备714(包括字母数字和其它键)耦合到总线702,用于向处理器704传送信息和命令选择。另一种类型的用户输入设备是游标控制716(诸如鼠标、轨迹球或者游标方向键),用于向处理器704传送方向信息和命令选择并且用于控制显示器712上的游标运动。这种输入设备通常具有在两个轴(第一轴(例如,x)和第二轴(例如,y))中的两个自由度,这允许设备指定平面中的位置。
计算机系统700可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,这些与计算机系统相组合,使计算机系统700或者把计算机系统700编程为专用机器。根据一个实施例,本文的技术由计算机系统700响应于处理器704执行包含在主存储器706中的一个或多个指令的一个或多个序列而执行。这种指令可以从另一个存储介质(诸如存储设备710)读到主存储器706中。包含在主存储器706中的指令序列的执行使处理器704执行本文所述的过程步骤。在替代实施例中,硬连线的电路系统可以代替软件指令或者与其组合使用。
如在本文所使用的,术语“存储介质”指存储使机器以具体方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备710。易失性介质包括动态存储器,诸如主存储器706。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带,或者任何其它磁性数据存储介质,CD-ROM,任何其它光学数据存储介质,任何具有孔图案的物理介质,RAM、PROM和EPROM、FLASH-EPROM、NVRAM,任何其它存储器芯片或盒式磁带。
存储介质与传输介质不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线702的线。传输介质还可以采取声或光波的形式,诸如在无线电波和红外线数据通信期间生成的那些。
各种形式的介质可以参与把一个或多个指令的一个或多个序列携带到处理器704以供执行。例如,指令最初可以被携带在远程计算机的磁盘或固态驱动器上。远程计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统700本地的调制解调器可以接收电话线上的数据并且使用红外线发送器把数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据,并且适当的电路系统可以把数据放在总线702上。总线702把数据携带到主存储器706,处理器704从该主存储器706取得指令并执行指令。由主存储器706接收的指令可以可选地在被处理器704执行之前或之后存储在存储设备710上。
计算机系统700还包括耦合到总线702的通信接口718。通信接口718提供耦合到网络链路720的双向数据通信,其中网络链路720连接到本地网络722。例如,通信接口718可以是综合业务数字网络(ISDN)卡、线缆调制解调器、卫星调制解调器,或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口718可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任何此类实现方案中,通信接口718都发送和接收携带表示各种类型信息的数字信号流的电信号、电磁信号或光学信号。
网络链路720通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路720可以通过本地网络722提供到主计算机724或者到由互联网服务提供商(ISP)726操作的数据设备的连接。ISP 726又通过现在通常称为“互联网”728的全局分组数据通信网络提供数据通信服务。本地网络722和互联网728都使用携带数字数据流的电信号、电磁信号或光学信号。通过各种网络的信号以及在网络链路720上并通过通信接口718的信号是传输介质的示例形式,其把数字数据携带到计算机系统700或者携带来自计算机系统700的数字数据。
计算机系统700可以通过(一个或多个)网络、网络链路720和通信接口718发送消息和接收数据,包括程序代码。在互联网示例中,服务器730可以通过互联网728、ISP 726、本地网络722和通信接口718发送针对应用程序的所请求代码。
所接收的代码可以在其被接收时由处理器704执行,和/或存储在存储设备710或其它非易失性储存器中以供随后执行。
扩展和替代方案
在前面的说明书中,已经参考各种具体细节描述了本发明的实施例,这些细节可以因实现方案而异。因而,说明书和附图应当被认为是说明性的而不是限制性的。本发明的范围的唯一且排他的指示以及申请人预期作为本发明的范围的内容是从本申请中发出的权利要求集合的字面范围和等同范围,这是以这种权利要求被发出的具体形式,包括任何后续的更正。
Claims (12)
1.一种方法,包括以下步骤:
在主存储器中存储一个或多个列单元的集合;
其中所述一个或多个列单元的集合与一个或多个列对应;
其中所述一个或多个列单元的集合中的每个列单元包括来自该列单元所对应的列的数据项;
其中所述一个或多个列属于由数据库服务器实例管理的数据库内的一个或多个盘上的表;
其中所述一个或多个列单元的集合包括与所述数据库内的特定表的至少一个特定列对应的特定列单元;
在主存储器中存储一个或多个虚拟列单元的集合;
其中所述一个或多个虚拟列单元的集合包括特定虚拟列单元,其中所述特定虚拟列单元存储通过在所述至少一个特定列上评估表达式而得出的结果;
在主存储器中存储将所述一个或多个列单元的集合与所述一个或多个虚拟列单元的集合相关联的数据;
其中所述一个或多个列单元的集合属于存储在主存储器中的第一存储器中列式单元;
其中所述一个或多个虚拟列单元的集合属于存储在主存储器中的第一存储器中表达式单元;
其中所述第一存储器中列式单元和所述第一存储器中表达式单元与来自所述一个或多个列的第一行集合对应;
其中使用所述第一行集合中来自所述至少一个特定列的值来得出存储在所述特定虚拟列单元中的结果;
其中,所述第一行集合包括第一行和第二行;
在共享元数据单元内维护指示所述第一行集合中的哪些行已经在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内变得陈旧的数据;
在主存储器中或盘上存储将所述共享元数据单元与所述第一存储器中列式单元和所述第一存储器中表达式单元相关联的数据;
响应于检测到对所述第一行的更新,更新所述共享元数据单元中的数据以指示在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内所述第一行已经变得陈旧;
在更新所述共享元数据单元中的数据之后,接收需要评估所述表达式的查询;
响应于接收到所述查询:
基于所述共享元数据单元中的数据,确定在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内所述第一行已经变得陈旧;以及
响应于确定在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内所述第一行已经变得陈旧,基于从除所述第一存储器中列式单元和所述第一存储器中表达式单元以外的源获得的值来针对所述第一行评估所述表达式;
基于所述共享元数据单元中的数据,确定在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内所述第二行不是陈旧的;以及
响应于确定在所述第一存储器中列式单元和所述第一存储器中表达式单元二者内所述第二行不是陈旧的,通过从所述第一存储器中表达式单元读取针对所述第二行的被高速缓存的所述表达式的结果,来获得针对所述第二行的所述表达式的结果。
2.如权利要求1所述的方法,还包括在主存储器中或盘上维护存储预先计算的结果的存储器中内部单元IMIU,其中所述预先计算的结果:
是从所述一个或多个列中的值得出的;并且
与所述一个或多个盘上的表的行没有一对一的对应关系。
3.如权利要求1所述的方法,
其中所述特定虚拟列单元存储用于特定虚拟列的数据;
其中使用所述表达式来定义所述特定虚拟列;以及
其中所述特定虚拟列不与盘上的列对应。
4.如权利要求1所述的方法,所述方法还包括:
在主存储器中存储第二存储器中列式单元和第二存储器中表达式单元;
其中所述第二存储器中列式单元和所述第二存储器中表达式单元与来自所述一个或多个列的第二行集合对应;
其中所述第二存储器中列式单元包括与所述一个或多个列对应的一个或多个列单元的第二集合;
其中所述第二存储器中表达式单元包括一个或多个虚拟列单元的第二集合;
其中所述一个或多个虚拟列单元的第二集合包括第二虚拟列单元,所述第二虚拟列单元存储使用所述第二行集合中来自所述至少一个特定列的值得出的针对所述表达式的结果。
5.如权利要求1所述的方法,还包括:
接收查询,所述查询包括在所述至少一个特定列上进行操作的所述表达式;
响应于接收到所述查询,基于将所述一个或多个列单元的集合与所述一个或多个虚拟列单元的集合相关联的所述数据来识别所述特定虚拟列单元;
将所述查询重写为访问存储在虚拟列单元中的结果,而不是重新计算针对所述表达式的结果。
6.如权利要求1所述的方法,还包括:
接收查询,所述查询包括对所述一个或多个列中的至少一个列进行操作的第二表达式;
其中针对所述第二表达式的结果没有被存储在所述一个或多个虚拟列单元的集合中;
响应于接收到所述查询,在评估所述第二表达式期间对用于所述第二表达式的统计信息集合进行更新;
基于在评估所述第二表达式期间更新的所述统计信息集合,确定是否在主存储器内或盘上具体化针对所述第二表达式的结果;
响应于确定具体化针对所述第二表达式的结果,在主存储器内生成并存储包括评估所述第二表达式的结果的至少一个虚拟列单元。
7.如权利要求1所述的方法,还包括:
基于为所述表达式维护的统计信息集合,确定针对所述表达式的结果应当从主存储器中被逐出;
响应于确定所述结果应当从主存储器中被逐出,从主存储器中移除所述特定虚拟列单元。
8.如权利要求1所述的方法,还包括响应于检测到所述一个或多个列单元的集合已经用来自所述一个或多个列的数据重新填充而重新填充所述一个或多个虚拟列单元的集合。
9.如权利要求1所述的方法,其中,从在所述一个或多个列单元的集合被填充时所存在的数据集合那样的数据集合中计算被填充在所述特定虚拟列单元中的所述结果;其中所述结果由后台进程填充在所述特定虚拟列单元中。
10.一种具有存储于其上的计算机程序的计算机可读存储介质,所述计算机程序被配置为当由处理器执行时执行如权利要求1-9中任一项所述的方法的步骤。
11.一种包括用于执行如权利要求1-9中任一项所述的方法的步骤的模块的装置。
12.一种包括存储器与处理器的装置,所述存储器具有存储于其上的计算机程序,所述处理器被配置为当执行所述计算机程序时执行如权利要求1-9中任一项所述的方法的步骤。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562198572P | 2015-07-29 | 2015-07-29 | |
US62/198,572 | 2015-07-29 | ||
US201562245959P | 2015-10-23 | 2015-10-23 | |
US62/245,959 | 2015-10-23 | ||
US15/146,799 | 2016-05-04 | ||
US15/146,799 US10204135B2 (en) | 2015-07-29 | 2016-05-04 | Materializing expressions within in-memory virtual column units to accelerate analytic queries |
PCT/US2016/044523 WO2017019881A1 (en) | 2015-07-29 | 2016-07-28 | Materializing expressions within in-memory virtual column units to accelerate analytic queries |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107851123A CN107851123A (zh) | 2018-03-27 |
CN107851123B true CN107851123B (zh) | 2021-10-15 |
Family
ID=56610006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680043491.5A Active CN107851123B (zh) | 2015-07-29 | 2016-07-28 | 在存储器中虚拟列单元内具体化表达式以加速分析查询 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10204135B2 (zh) |
EP (1) | EP3329393B1 (zh) |
CN (1) | CN107851123B (zh) |
WO (1) | WO2017019881A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10162603B2 (en) * | 2016-09-10 | 2018-12-25 | Sap Se | Loading data for iterative evaluation through SIMD registers |
US10795887B1 (en) * | 2016-11-06 | 2020-10-06 | Tableau Software, Inc. | Dynamic rebuilding of query execution trees and reselection of query execution operators |
US10521430B1 (en) * | 2016-11-06 | 2019-12-31 | Tableau Software, Inc. | Dynamic selection of query execution operators |
US10901990B1 (en) | 2017-06-30 | 2021-01-26 | Tableau Software, Inc. | Elimination of common subexpressions in complex database queries |
US11055284B1 (en) | 2017-06-30 | 2021-07-06 | Tableau Software, Inc. | Optimizing domain queries for relational databases |
US10719508B2 (en) * | 2018-04-19 | 2020-07-21 | Risk Management Solutions, Inc. | Data storage system for providing low latency search query responses |
US11226955B2 (en) * | 2018-06-28 | 2022-01-18 | Oracle International Corporation | Techniques for enabling and integrating in-memory semi-structured data and text document searches with in-memory columnar query processing |
CN109145013A (zh) * | 2018-08-10 | 2019-01-04 | 上海达梦数据库有限公司 | 一种表达式转换方法、装置、设备及存储介质 |
CN109491982B (zh) * | 2018-10-22 | 2021-10-22 | 上海豹云网络信息服务有限公司 | 移动互联网的移动终端内创建虚拟存储单元的方法及系统 |
US10795888B2 (en) | 2018-12-21 | 2020-10-06 | Tableau Software, Inc. | Elimination of query fragment duplication in complex database queries |
US11514027B2 (en) * | 2019-06-07 | 2022-11-29 | Sap Se | Paged hybrid LOBs |
US11157495B2 (en) * | 2019-07-23 | 2021-10-26 | International Business Machines Corporation | Dynamically managing predicate expression columns in an encrypted database |
US11507590B2 (en) * | 2019-09-13 | 2022-11-22 | Oracle International Corporation | Techniques for in-memory spatial object filtering |
US11514055B2 (en) | 2019-09-13 | 2022-11-29 | Oracle International Corporation | Querying on hybrid formats and storages |
US11507371B2 (en) * | 2019-12-11 | 2022-11-22 | Microsoft Technology Licensing, Llc | Column data driven arithmetic expression evaluation |
CN111143411A (zh) * | 2019-12-23 | 2020-05-12 | 跬云(上海)信息科技有限公司 | 动态流式预计算方法及装置、存储介质 |
US11308090B2 (en) | 2019-12-26 | 2022-04-19 | Snowflake Inc. | Pruning index to support semi-structured data types |
US11372860B2 (en) * | 2019-12-26 | 2022-06-28 | Snowflake Inc. | Processing techniques for queries where predicate values are unknown until runtime |
US11567939B2 (en) | 2019-12-26 | 2023-01-31 | Snowflake Inc. | Lazy reassembling of semi-structured data |
US10769150B1 (en) | 2019-12-26 | 2020-09-08 | Snowflake Inc. | Pruning indexes to enhance database query processing |
US11500868B2 (en) | 2021-01-29 | 2022-11-15 | Oracle International Corporation | Efficient identification of vertices and edges for graph indexes in an RDBMS |
US11880369B1 (en) | 2022-11-21 | 2024-01-23 | Snowflake Inc. | Pruning data based on state of top K operator |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1653452A (zh) * | 2002-05-10 | 2005-08-10 | 甲骨文国际公司 | 管理数据库系统中的表达式 |
CN102667942A (zh) * | 2009-11-17 | 2012-09-12 | 飞思卡尔半导体公司 | 存储器装置及其方法 |
CN103123650A (zh) * | 2013-03-06 | 2013-05-29 | 同方知网(北京)技术有限公司 | 一种基于整数映射的xml数据库全文索引方法 |
CN104657413A (zh) * | 2013-11-22 | 2015-05-27 | Sap欧洲公司 | 加密的内存列存储 |
Family Cites Families (105)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4815030A (en) | 1986-09-03 | 1989-03-21 | Wang Laboratories, Inc. | Multitask subscription data retrieval system |
US5072405A (en) | 1988-10-31 | 1991-12-10 | Digital Equipment Corporation | RETE network with provisional satisfaction of node conditions |
US5179702A (en) | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
US5325292A (en) | 1990-10-12 | 1994-06-28 | Crockett Gary B | Tour/schedule generation for a force management system |
JP2929042B2 (ja) | 1991-09-30 | 1999-08-03 | 国際電気株式会社 | 携帯型金融情報通報システムおよびその制御装置 |
US5446885A (en) | 1992-05-15 | 1995-08-29 | International Business Machines Corporation | Event driven management information system with rule-based applications structure stored in a relational database |
US5574897A (en) | 1992-09-30 | 1996-11-12 | International Business Machines Corporation | System managed logging of objects to speed recovery processing |
GB2274182B (en) | 1993-01-09 | 1996-09-25 | Digital Equipment Int | Database co-processor |
JPH06319024A (ja) | 1993-05-07 | 1994-11-15 | Nippon Rojisuteikusu Kk | ファクシミリサーバシステム |
JPH07248948A (ja) | 1994-03-10 | 1995-09-26 | Fujitsu Ltd | データベースの動的構成方式 |
US5758144A (en) | 1994-06-24 | 1998-05-26 | International Business Machines Corporation | Database execution cost and system performance estimator |
JPH0816378A (ja) | 1994-06-30 | 1996-01-19 | Fujitsu Ltd | プログラム・リバース解析方法および装置 |
US5870552A (en) | 1995-03-28 | 1999-02-09 | America Online, Inc. | Method and apparatus for publishing hypermedia documents over wide area networks |
US5564047A (en) | 1995-04-11 | 1996-10-08 | International Business Machines Corporation | Trigger generation in an active database management system |
CA2176164A1 (en) | 1995-05-19 | 1996-11-20 | Hosagrahar Visvesvaraya Jagadish | Method for managing rule conflicts in active rule-based systems |
US6070160A (en) | 1995-05-19 | 2000-05-30 | Artnet Worldwide Corporation | Non-linear database set searching apparatus and method |
US6370552B1 (en) | 1997-05-14 | 2002-04-09 | Citrix Systems, Inc. | Apparatus and method for displaying application output in an HTML document |
US5778350A (en) | 1995-11-30 | 1998-07-07 | Electronic Data Systems Corporation | Data collection, processing, and reporting system |
US5870605A (en) | 1996-01-18 | 1999-02-09 | Sun Microsystems, Inc. | Middleware for enterprise information distribution |
US5873084A (en) | 1996-01-18 | 1999-02-16 | Sun Microsystems, Inc. | Database network connectivity product |
US5991733A (en) | 1996-03-22 | 1999-11-23 | Hartford Fire Insurance Company | Method and computerized system for managing insurance receivable accounts |
US5999946A (en) | 1996-04-10 | 1999-12-07 | Harris Corporation | Databases in telecommunications |
US5864871A (en) | 1996-06-04 | 1999-01-26 | Multex Systems | Information delivery system and method including on-line entitlements |
FR2750517B1 (fr) | 1996-06-27 | 1998-08-14 | Bull Sa | Procede de surveillance d'une pluralite de types d'objets d'une pluralite de noeuds a partir d'un noeud d'administration dans un systeme informatique |
US5819255A (en) | 1996-08-23 | 1998-10-06 | Tandem Computers, Inc. | System and method for database query optimization |
US5899986A (en) | 1997-02-10 | 1999-05-04 | Oracle Corporation | Methods for collecting query workload based statistics on column groups identified by RDBMS optimizer |
US6067540A (en) | 1997-02-28 | 2000-05-23 | Oracle Corporation | Bitmap segmentation |
US5873091A (en) | 1997-04-28 | 1999-02-16 | International Business Machines Corporation | System for data structure loading with concurrent statistical analysis |
US5873075A (en) | 1997-06-30 | 1999-02-16 | International Business Machines Corporation | Synchronization of SQL actions in a relational database system |
US6038601A (en) | 1997-07-21 | 2000-03-14 | Tibco, Inc. | Method and apparatus for storing and delivering documents on the internet |
US6173154B1 (en) | 1997-07-31 | 2001-01-09 | The Psychological Corporation | System and method for imaging test answer sheets having open-ended questions |
US6189022B1 (en) | 1997-08-20 | 2001-02-13 | Honeywell International Inc. | Slack scheduling for improved response times of period transformed processes |
US6539371B1 (en) | 1997-10-14 | 2003-03-25 | International Business Machines Corporation | System and method for filtering query statements according to user-defined filters of query explain data |
US6085191A (en) | 1997-10-31 | 2000-07-04 | Sun Microsystems, Inc. | System and method for providing database access control in a secure distributed network |
US6035306A (en) | 1997-11-24 | 2000-03-07 | Terascape Software Inc. | Method for improving performance of large databases |
US6122639A (en) | 1997-12-23 | 2000-09-19 | Cisco Technology, Inc. | Network device information collection and change detection |
EP0959416A3 (en) | 1998-05-08 | 2005-08-10 | International Business Machines Corporation | Using database query technology for message subscriptions in messaging systems |
US6115703A (en) | 1998-05-11 | 2000-09-05 | International Business Machines Corporation | Two-level caching system for prepared SQL statements in a relational database management system |
US6223171B1 (en) | 1998-08-25 | 2001-04-24 | Microsoft Corporation | What-if index analysis utility for database systems |
CA2287768C (en) | 1998-11-02 | 2004-01-13 | Ahmed Abdoh | Method for automated data collection, analysis and reporting |
US6470330B1 (en) | 1998-11-05 | 2002-10-22 | Sybase, Inc. | Database system with methods for estimation and usage of index page cluster ratio (IPCR) and data page cluster ratio (DPCR) |
US6285997B1 (en) | 1998-11-16 | 2001-09-04 | International Business Machines Corporation | Query optimization with deferred update and autonomous sources |
US6442568B1 (en) | 1998-12-11 | 2002-08-27 | Compaq Computer Corporation | Customer information control system application programming interface with transient data functions, in a loosely coupled data processing environment |
US6377943B1 (en) | 1999-01-20 | 2002-04-23 | Oracle Corp. | Initial ordering of tables for database queries |
US6321218B1 (en) | 1999-02-24 | 2001-11-20 | Oracle Corporation | Automatically determining data that is best suited for index tuning |
US6553369B1 (en) | 1999-03-11 | 2003-04-22 | Oracle Corporation | Approach for performing administrative functions in information systems |
US6356880B1 (en) | 1999-04-27 | 2002-03-12 | Oracle Corporation | Methods and systems for dynamic cost allocation through task auto assignment |
US6353828B1 (en) * | 1999-05-14 | 2002-03-05 | Oracle Corp. | Concurrency control for transactions that update base tables of a materialized view using different types of locks |
US6389430B1 (en) | 1999-07-07 | 2002-05-14 | Computer Associates Think, Inc. | Real-time database object statistics collection |
US6405191B1 (en) | 1999-07-21 | 2002-06-11 | Oracle Corporation | Content based publish-and-subscribe system integrated in a relational database system |
CA2743462C (en) | 1999-07-30 | 2012-10-16 | Basantkumar John Oommen | A method of generating attribute cardinality maps |
GB2354847A (en) | 1999-09-28 | 2001-04-04 | Ibm | Publish/subscribe data processing with subscription points for customised message processing |
US6665684B2 (en) | 1999-09-27 | 2003-12-16 | Oracle International Corporation | Partition pruning with composite partitioning |
GB2354848A (en) | 1999-09-28 | 2001-04-04 | Ibm | Publish/subscribe data processing with subscriber requested messageflow for customised message processing |
US6604093B1 (en) | 1999-12-27 | 2003-08-05 | International Business Machines Corporation | Situation awareness system |
US7016910B2 (en) | 1999-12-30 | 2006-03-21 | Decode Genetics Ehf. | Indexing, rewriting and efficient querying of relations referencing semistructured data |
US7072934B2 (en) | 2000-01-14 | 2006-07-04 | Saba Software, Inc. | Method and apparatus for a business applications server management system platform |
US6604100B1 (en) | 2000-02-09 | 2003-08-05 | At&T Corp. | Method for converting relational data into a structured document |
AU2001241510A1 (en) | 2000-02-16 | 2001-08-27 | Askit Systems Inc. | Customer service system and method |
US6427146B1 (en) | 2000-03-31 | 2002-07-30 | Wesley W. Chu | Database event detection and notification system using type abstraction hierarchy (TAH) |
US6681383B1 (en) | 2000-04-04 | 2004-01-20 | Sosy, Inc. | Automatic software production system |
AU5677901A (en) | 2000-05-18 | 2001-11-26 | Kabushiki Kaisha Daiwa Shoken Group Honsha | Method and system for transmitting stock price information, information databasetherefor, server for detecting conditions and client terminal |
US6519580B1 (en) | 2000-06-08 | 2003-02-11 | International Business Machines Corporation | Decision-tree-based symbolic rule induction system for text categorization |
US6757675B2 (en) | 2000-07-24 | 2004-06-29 | The Regents Of The University Of California | Method and apparatus for indexing document content and content comparison with World Wide Web search service |
US7844666B2 (en) | 2000-12-12 | 2010-11-30 | Microsoft Corporation | Controls and displays for acquiring preferences, inspecting behavior, and guiding the learning and decision policies of an adaptive communications prioritization and routing system |
US6904454B2 (en) | 2001-03-21 | 2005-06-07 | Nokia Corporation | Method and apparatus for content repository with versioning and data modeling |
US6901410B2 (en) | 2001-09-10 | 2005-05-31 | Marron Pedro Jose | LDAP-based distributed cache technology for XML |
CA2359296A1 (en) * | 2001-10-18 | 2003-04-18 | Ibm Canada Limited-Ibm Canada Limitee | Method of cardinality estimation using statistical soft constraints |
US7882103B2 (en) * | 2002-03-28 | 2011-02-01 | Teradata Us, Inc. | Using point-in-time views to provide varying levels of data freshness |
US7092954B1 (en) | 2001-12-31 | 2006-08-15 | Ncr Corporation | Optimizing an equi-join operation using a bitmap index structure |
US6832219B2 (en) | 2002-03-18 | 2004-12-14 | International Business Machines Corporation | Method and system for storing and querying of markup based documents in a relational database |
US6823329B2 (en) | 2002-04-02 | 2004-11-23 | Sybase, Inc. | Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage |
US6691155B2 (en) | 2002-06-20 | 2004-02-10 | Linda Gottfried | Multimedia system for sharing brand information keeps history of modifications of production information by consumers to allow recreating multimedia interface in its previous formats |
US6917946B2 (en) | 2002-08-12 | 2005-07-12 | International Business Machines Corporation | Method and system for partitioning filter rules for multi-search enforcement |
US7644361B2 (en) | 2002-12-23 | 2010-01-05 | Canon Kabushiki Kaisha | Method of using recommendations to visually create new views of data across heterogeneous sources |
US20040193575A1 (en) | 2003-03-25 | 2004-09-30 | Chia-Hsun Chen | Path expressions and SQL select statement in object oriented language |
US7383246B2 (en) * | 2003-10-31 | 2008-06-03 | International Business Machines Corporation | System, method, and computer program product for progressive query processing |
US7406477B2 (en) | 2004-03-12 | 2008-07-29 | Sybase, Inc. | Database system with methodology for automated determination and selection of optimal indexes |
US7945569B2 (en) | 2004-03-31 | 2011-05-17 | Hewlett-Packard Development Company, L.P. | Method and apparatus for querying spatial data |
US7480302B2 (en) | 2004-05-11 | 2009-01-20 | Samsung Electronics Co., Ltd. | Packet classification method through hierarchical rulebase partitioning |
US20050283458A1 (en) | 2004-06-22 | 2005-12-22 | Microsoft Corporation | Automatic detection of frequently used query patterns in a query workload |
US20060047696A1 (en) * | 2004-08-24 | 2006-03-02 | Microsoft Corporation | Partially materialized views |
US7668856B2 (en) | 2004-09-30 | 2010-02-23 | Alcatel-Lucent Usa Inc. | Method for distinct count estimation over joins of continuous update stream |
US7877519B2 (en) | 2004-10-18 | 2011-01-25 | Intel Corporation | Selecting one of a plurality of adapters to use to transmit a packet |
US20060242694A1 (en) | 2004-11-08 | 2006-10-26 | Jeffrey Gold | Mitigation and mitigation management of attacks in networked systems |
US7512589B2 (en) | 2005-02-25 | 2009-03-31 | Trigeo Network Security, Inc. | Temporal knowledgebase |
US7409387B2 (en) | 2005-02-28 | 2008-08-05 | International Business Machines Corporation | Materialized query table matching with query expansion |
US7599925B2 (en) * | 2005-03-31 | 2009-10-06 | Microsoft Corporation | Using query expression signatures in view matching |
US20060288030A1 (en) | 2005-06-09 | 2006-12-21 | Ramon Lawrence | Early hash join |
US7739318B2 (en) | 2005-06-20 | 2010-06-15 | Netapp, Inc. | System and method for maintaining mappings from data containers to their parent directories |
US7401080B2 (en) | 2005-08-17 | 2008-07-15 | Microsoft Corporation | Storage reports duplicate file detection |
US7966315B2 (en) | 2005-11-15 | 2011-06-21 | Vmware, Inc. | Multi-query optimization |
US8560569B2 (en) | 2006-01-27 | 2013-10-15 | Emc Corporation | Method and apparatus for performing bulk file system attribute retrieval |
US7873628B2 (en) | 2006-03-23 | 2011-01-18 | Oracle International Corporation | Discovering functional dependencies by sampling relations |
US20080059412A1 (en) * | 2006-08-31 | 2008-03-06 | Tarin Stephen A | Value-instance connectivity computer-implemented database |
US7636731B2 (en) | 2006-11-16 | 2009-12-22 | Oracle International Corporation | Approximating a database statistic |
US7603339B2 (en) | 2006-11-16 | 2009-10-13 | Oracle International Corporation | Merging synopses to determine number of distinct values in large databases |
US8069188B2 (en) | 2007-05-07 | 2011-11-29 | Applied Technical Systems, Inc. | Database system storing a data structure that includes data nodes connected by context nodes and related method |
US8046352B2 (en) * | 2007-12-06 | 2011-10-25 | Oracle International Corporation | Expression replacement in virtual columns |
CN102053989A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于确定要被物化的节点的方法和系统 |
US8719307B2 (en) | 2010-04-23 | 2014-05-06 | Red Hat, Inc. | Concurrent linked hashed maps |
US9183254B1 (en) | 2012-05-04 | 2015-11-10 | Paraccel Llc | Optimizing database queries using subquery composition |
TW201428503A (zh) | 2013-01-08 | 2014-07-16 | Compal Electronics Inc | 快取檔案的管理方法及系統 |
US9659045B2 (en) | 2013-11-08 | 2017-05-23 | Oracle International Corporation | Generic indexing for efficiently supporting ad-hoc query over hierarchically marked-up data |
EP3051440B1 (en) * | 2014-11-12 | 2019-01-02 | Huawei Technologies Co. Ltd. | Keyvalue database data table updating method and data table updating device |
-
2016
- 2016-05-04 US US15/146,799 patent/US10204135B2/en active Active
- 2016-07-28 EP EP16748005.2A patent/EP3329393B1/en active Active
- 2016-07-28 CN CN201680043491.5A patent/CN107851123B/zh active Active
- 2016-07-28 WO PCT/US2016/044523 patent/WO2017019881A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1653452A (zh) * | 2002-05-10 | 2005-08-10 | 甲骨文国际公司 | 管理数据库系统中的表达式 |
CN102667942A (zh) * | 2009-11-17 | 2012-09-12 | 飞思卡尔半导体公司 | 存储器装置及其方法 |
CN103123650A (zh) * | 2013-03-06 | 2013-05-29 | 同方知网(北京)技术有限公司 | 一种基于整数映射的xml数据库全文索引方法 |
CN104657413A (zh) * | 2013-11-22 | 2015-05-27 | Sap欧洲公司 | 加密的内存列存储 |
Non-Patent Citations (2)
Title |
---|
An architecture for recycling intermediates in a column-store;MILENA G IVANOVA ET AL;《SIGMOD-PODS "09:COMPILATION PROCEEDINGS OF THE INTERNATIONAL CONFERENCE ON MANAGEMENT DATA & 28TH SYMPOSIUM ON PRINCIPLES OF DATABASE SYSTEMS》;20090629;309-320 * |
Efficient Exploitation of Similar Subexpressions for Query Processing;JINGREN ZHOU ET AL;《INTERNATIONAL CONFERENCE ON MANAGEMENT OF DATA》;20070101;533 * |
Also Published As
Publication number | Publication date |
---|---|
US10204135B2 (en) | 2019-02-12 |
US20170031975A1 (en) | 2017-02-02 |
EP3329393B1 (en) | 2019-03-06 |
EP3329393A1 (en) | 2018-06-06 |
CN107851123A (zh) | 2018-03-27 |
WO2017019881A1 (en) | 2017-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107851123B (zh) | 在存储器中虚拟列单元内具体化表达式以加速分析查询 | |
US11238039B2 (en) | Materializing internal computations in-memory to improve query performance | |
US9542442B2 (en) | Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns | |
US9916352B2 (en) | Caching external data sources for SQL processing | |
US7895151B2 (en) | Fast bulk loading and incremental loading of data into a database | |
US7966343B2 (en) | Accessing data in a column store database based on hardware compatible data structures | |
US8224800B2 (en) | Hardware accelerated reconfigurable processor for accelerating database operations and queries | |
CN108140040B (zh) | 存储器中数据库的选择性数据压缩 | |
US8285709B2 (en) | High-concurrency query operator and method | |
US8458129B2 (en) | Methods and systems for real-time continuous updates | |
US20220391394A1 (en) | Caching for disk based hybrid transactional analytical processing system | |
Amur et al. | Memory-efficient groupby-aggregate using compressed buffer trees | |
US20220382758A1 (en) | Query processing for disk based hybrid transactional analytical processing system | |
D'silva | Join Index Implementation in a Distributed Partitioned Columnar Relational Database Management System | |
Plattner et al. | The Technical Foundations of SanssouciDB |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |