本文中所描述的主题总体涉及数据库管理系统,更具体地,涉及一种用于提高查询执行的性能的系统和方法,其中聚类提高性能。
背景技术:
数据库系统一般用于应答从存储的数据库请求信息的查询。查询可以定义为针对数据库中的数据和所表达的数据关系的逻辑表达式,并得到对数据库中的子集的识别结果。在最近的进步中,数据库系统使得单个查询执行能够并行运行。
随着具有平行计算资源的强大硬件(如处理器和处理器核心)的进步,计算从单线程转移到使得单一查询执行能够并行运行的多线程。已设计许多算法,包括并行排序算法,如双调排序、并行基数排序,高级并行算法,如用于图形处理的werbuch-shiloach算法,等以利用平行的多个核心,从而提高系统性能。
并行计算的进步之一是通过使用非对称存储器引入的。非对称存储器是以以下方式构建的计算机存储器:计算机存储器被分成存储体,每个存储体与处理器紧密关联,并且访问存储器的成本取决于所访问的存储体对于处理器而言是本地的还是远程的。非对称存储器实现的示例是大多数芯片制造商采用的numa(非一致性内存访问)架构。
然而,随着系统中cpu数量的增加,越来越多的工作正被并行执行。这导致新的高效的内查询算法的发明,例如,并行合并排序算法。但大多数这些算法都有合并阶段的瓶颈。
在分析查询处理中,操作---连结组聚合、sort、join,但不限于这些---被认为是最频繁使用并且代价最高的操作。示例性的现有技术专利文献之一us5850547通过在计算系统中执行聚合函数的并行处理提供了这样的解决方案,如图1中所示。然而,在组聚合的情况下,可以通过将工作负载分布于不同线程之中使得能够避免合并阶段来避免第二合并阶段(根据文献‘547中提供的解决方案)。但是这要求数据的划分。并且,当待划分的记录的数量太大时,数据的划分变得代价高昂。
在一些现有技术中,执行加载时间聚类。但负载时间聚类将限制划分使其局限于仅单一列,因此会严重限制从划分受益的查询的数量。
因此,需要这样一种方法:将采用用户的工作环境并使用最新的技术来提供将减少组聚合成本从而提高整体系统性能的解决方案。
为了实现上述需要并解决现有技术中的上述问题,提供了各种解决方案,其中一些包括但不限于:
●现有技术文献us7779008中提供的一种解决方案,该解决方案提供了用于对驻留在诸如关系表之类容器中的数据执行并行聚合操作的技术。将初始数据划分成多片(或数据可能已经划分好)示出于图2中。
●另一种解决方案是通过引入b-mpsm分份join算法提供的,其中分配用于在每个节点上执行聚合的一个线程/进程,然后在最后汇总每个节点的结果,然后投射得出的结果,如图3中所示。
然而,现有技术中的上述解决方案和其它现有解决方案具有如下所述的至少两个主要问题,包括但不限于:
●对于优化分组后聚合,未执行快速聚类;以及
●对于已由多篇论文推荐的连结算法聚类,聚类在每当执行查询时即时进行。
因此,基于以上问题,可以清楚地理解,现有的/传统的查询执行过程中的主要挑战是每次都必须执行聚类的情况,这是次优的。因此,考虑到其中要么执行两次相同的查询要么执行需要相同划分的两个不同的查询的情况,本领域技术人员可以理解,两种查询都将需要执行聚类。
技术实现要素:
提供本发明内容是为了引入与下文具体实施方式中进一步描述的用于使用集群缓存进行数据库查询的并行优化的系统和方法有关的概念。本发明内容并不意在标识所要求保护的主题的本质特征,也不意在用于确定或限制所要求保护的主题的范围。
技术问题:有必要提供一种适应用户的工作环境并提高组聚合/排序/join性能的机制。另外,还有必要提供一种用于确定可以用于存储列的聚类信息的系统存储器的量的机制。另外,所提供的机制必须降低并行内查询聚合期间组聚合/排序/join的性能成本。另外,为了避免查询执行时间并增强cpu的整体性能,要求一种使得针对一次操作/查询完成的聚类可以通过额外操作重复使用(如group->sort->join)的机制。
技术解决方案:为了解决上述问题以及现有技术中存在的其它问题,公开了用于缓存聚类信息的动态聚类的新概念。所公开的机制适应用户的工作环境并通过缓存聚类信息提高了组聚合/排序/join的性能。另外,所公开的机制使用动态聚类(通过避免并行聚合的合并阶段)提高了通过聚合分组/排序/join的性能,并且进一步通过缓存聚类信息并将其存储在工作线程的本地存储器中来优化cpu的整体性能。集群信息的缓存基于用户配置以避免系统存储器的过度使用。例如,在本发明中,通过使用聚类避免了合并阶段。聚类确保了相同的数据不存在于两个集群中。因此,没有必要进行合并从而避免了用于执行的过量时间。每个集群可以作为独立实体进行处理。
多个方面提供了一种用于使用集群缓存进行数据库查询的并行优化的系统和方法。技术解决方案如下:
在一个方面中,公开了一种用于从数据库请求数据的数据库查询的并行优化的系统。所述系统包括数据库、耦合到存储器的处理器,并且所述处理器用于:
●基于接收到的所述数据库查询的性质和/或统计确定所述数据库查询是否需要进行聚类;
●如果确定所述查询需要进行聚类,基于接收到的所述数据库查询对所述数据库中存在的数据进行聚类,并在查询处理后向用户显示所述查询的结果;
●保留聚类后数据,并由此创建包括集群元数据、至少一个数据元素以及所述保留的集群数据的至少一个集群缓存;以及
●当接收到新查询并且如果所述新查询与所述数据元素和/或所述集群元数据相匹配,重用来自所述集群缓存的所述聚类后数据用于查询处理。
在另一方面中,公开了一种用于从数据库请求数据的数据库查询的并行优化的方法。所述方法包括:
●基于接收到的所述数据库查询的性质和/或统计确定所述数据库查询是否需要进行聚类;
●如果确定所述查询需要进行聚类,基于接收到的所述数据库查询对所述数据库中存在的数据进行聚类,并向用户显示所述查询的结果;
●保留所述聚类后数据;
●创建包括集群元数据、至少一个数据元素以及所述保留的集群数据的至少一个集群缓存;以及
●当接收到新查询并且如果所述新查询与所述数据元素和/或所述集群元数据相匹配,重用来自所述集群缓存的所述聚类后数据用于所述新查询的处理。
在本发明的又一方面中,提供了一种系统和方法以通过使用动态聚类避免并行聚合的合并阶段来提高通过聚合分组的性能,并且进一步通过缓存聚类信息并将其存储在工作线程的本地存储器中来优化所述系统。所述集群信息的缓存基于用户配置以避免系统存储器的过度使用。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种用于确定可以用于存储列的聚类信息的系统存储器的量的机制。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种用于通过避免并行内查询聚合的第二合并阶段来降低组聚合成本的机制。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种用于缓存所述集群信息以避免每次执行查询时都进行聚类操作从而降低执行查询的成本的机制。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种用于移除未使用的聚类信息以便为频繁使用的列提供空间。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种用于将所述聚类信息分布在不同numa节点中以提高本地存储器使用率并减少缓存未命中的机制。
在一种实施方式中,通过使用上述技术解决方案,本发明提供了一种使得针对一次操作完成的聚类可以通过额外操作重复使用(如group->sort->join)的机制。
附图说明
该详细描述是参考附图描述的。在附图中,参考编号最左边的数字表示所述参考编号在该附图中首次出现。相同编号在所有附图中用以指代类似的特殊和组件。
图1示出现有技术专利文献us5850547中公开的通过在计算系统中执行聚合函数的并行处理的解决方案。
图2示出现有技术文献us7779008中公开的通过将初始数据划分成多片(或数据可能已经划分好)的解决方案。
图3示出b-mpsm分份join算法,其中分配用于在每个节点上执行聚合的一个线程/进程,然后在最后汇总每个节点的结果,然后投射得出的结果。
图4示出根据本发明主题的实施例的这样一种机制:通过使用动态聚类避免并行聚合的合并阶段来提高通过聚合分组的性能,并且进一步通过缓存聚类信息并将其存储在工作线程的本地存储器中来优化系统。
图5示出根据本发明主题的实施例的用于从数据库请求数据的数据库查询的并行优化的系统。
图6示出根据本发明主题的实施例的用于从数据库请求数据的数据库查询的并行优化的方法。
图7示出根据本发明主题的实施例的作为样本的一组记录,其中示出用于聚类的方案。
具体实施方式
以下结合本发明实施例中的附图清楚地描述了本发明实施例中的技术解决方案。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明可以以多种方式实施,包括作为过程、装置、系统、物质组合物、计算机可读介质如计算机可读存储介质,或其中程序指令通过光或电子通信链路发送的计算机网络。在本说明书中,这些实现方式或本发明可以采取的任何其它形式可被称为技术。在一般情况下,所公开的过程的步骤的顺序可以在本发明的范围内进行调整。
下面结合图解本发明的原理的附图提供了本发明的一个或多个实施例的详细描述。本发明是结合此类实施例进行描述的,但本发明并不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖各种可替代物、修改和等效物。为了提供对本发明的透彻理解,以下描述中阐述了各种具体细节。提供这些细节是为了示例的目的,并且本发明可以在没有这些具体细节中的一些或全部的情况下根据权利要求进行实践。出于清晰的目的,与本发明相关的技术领域中已知的技术材料未进行详细描述,以免使本发明不必要地模糊不清。
公开了用于使用集群缓存进行数据库查询的并行优化的系统和方法。
现参照图4,图4示出根据本发明主题的实施例的这样一种机制:通过使用动态聚类避免并行聚合的合并阶段来提高通过聚合分组的性能,并且进一步通过缓存聚类信息并将其存储在工作线程的本地存储器中来优化系统。图4示出两个关键点,(1)数据被聚类成被命名为“集群1”、“集群2”等的多个块,(2)存在关联到每个集群以处理这些集群的名为工作线程的线程。在一种典型的实施方式中,需要分组的所有数据使用像基数聚类的任何已知的聚类机制进行聚类。每个集群包含排他性信息,即没有两个集群包含相同的信息。这些集群中的每个集群均位于与一个或其它numa节点相关联的存储器中。为了处理这些集群中的数据,一个线程与每个集群相关联。这些线程与关联到相应numa节点的核心相联系。
在一种实施方式中,提供了系统和方法以通过使用动态聚类避免并行聚合的合并阶段来提高通过聚合分组的性能,并且进一步通过缓存聚类信息并将其存储在工作线程的本地存储器中来优化系统。集群信息的缓存基于用户配置以避免系统存储器的过度使用。
虽然针对通过使用动态聚类避免并行聚合的合并阶段来提高通过聚合分组的性能进行描述的方面可以以任何数量的不同的计算系统、环境和/或配置来实施,但实施例是在下面的示例性系统、设备和方法的上下文中进行描述的。
现参照图5,图5示出根据本发明主题的实施例的用于从数据库(110)请求数据的数据库查询的并行优化的系统(100)。
在一种实施方式中,该系统包括数据库(110)、耦合到存储器(108)的处理器(104),并且处理器(110)用于:基于接收到的数据库查询的性质和/或统计确定(112)数据库查询是否需要进行聚类;如果确定查询需要进行聚类,基于接收到的数据库查询对数据库中存在的数据进行聚类(114),并在查询处理后向用户显示查询的结果;保留(116)聚类后数据,并由此创建包括集群元数据、至少一个数据元素以及保留的集群数据的至少一个集群缓存;以及当接收到新查询并且如果新查询与数据元素和/或集群元数据相匹配,重用(118)来自集群缓存的聚类后数据用于查询处理。
在一种实施方式中,系统(100)与用户设备/数据库客户端系统(102)可通信地耦合。虽然本发明主题是在认为系统(100)被实施为单独的计算单元的条件下进行了阐述,但可以理解,系统(100)也可以在服务器上,在诸如膝上型计算机、台式计算机、笔记本、工作站、大型计算机、服务器、网络服务器等各种计算系统中进行实施。应理解,系统(100)可以由多个用户通过一个或多个用户设备/客户端系统102-1、102-2……102-n或驻留在用户设备102上的应用进行访问,这些用户设备/客户端系统在下文中统称为用户(102)。用户设备(102)的示例可以包括,但不限于,便携式计算机、个人数字助理、手持式设备和工作站。用户设备(102)通过网络(未示出)通信地耦合到系统(100)。
在一种实施方式中,网络可以是无线网络、有线网络或其组合。网络可以实施为不同类型的网络,如内联网、本地局域网(localareanetwork,lan)、广域网(wideareanetwork,wan)、互联网等。网络可以是专用网络或共享网络。共享网络代表使用不同协议的不同类型的网络的联合以相互通信,协议例如,超文本传输协议(hypertexttransferprotocol,http)、传输控制协议/网际协议(transmissioncontrolprotocol/internetprotocol,tcp/ip)、无线应用协议(wirelessapplicationprotocol,wap)等。另外,网络可以包括各种网络设备,包括路由器、桥接器、服务器、计算设备、存储设备等。
在一种实施方式中,该至少一个处理器(104)可以实施为一个或多个微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路系统,和/或基于操作指令操纵信号的任何设备。除其它能力之外,该至少一个处理器(104)用于获取和执行存储在存储器(108)中的计算机可读指令。
接口(106)可以包括各种软件和硬件接口,例如,网络接口、图形用户界面等。接口(204)可以允许客户端系统/用户(102)直接地或通过系统(100)与用户交互。另外,接口(106)可以使得系统(100)能够与其它计算设备,如网络服务器和外部数据服务器(未示出),进行通信。接口(106)可以方便各种网络和协议类型内的多种通信,网络包括:有线网络,例如lan、电缆等,以及无线网络,例如wlan、蜂窝,或卫星。接口(106)可以包括用于将多个设备彼此连接或连接到另一服务器的一个或多个端口。
存储器(108)可以包括本领域中已知的任何计算机可读介质,包括:例如易失性存储器,如静态随机存取存储器(staticrandomaccessmemory,sram)和动态随机存取存储器(dynamicrandomaccessmemory,dram),和/或非易失性存储器,如只读存储器(readonlymemory,rom)、可擦可编程rom、闪速存储器、硬盘、光盘和磁带。存储器(108)可以包括至少一个查询编译器,查询编译器用于为接收到的数据库查询准备具有多个计划节点的树结构中的执行计划。应注意,查询编译器是常规编译器,并且执行计划生成是利用现有技术中可用的传统/约定方法完成的。
在一种实施方式中,用户(102)通过向位于数据库服务器系统(100)处或系统(100)的数据库(110)发送/发起查询来与系统(100)交互。
在一种实施方式中,系统(100)用于检查来自数据库客户端的查询请求是否是聚类的候选者/要求进行聚类。检查可以基于查询的性质以及统计来执行。查询的性质的示例可以包括但不限于查询的类型,如join或groupaggregate。如果查询的性质适合进行聚类(通常是join、groupaggregate、sort),那么可以选择该查询。然后对统计进行检查。如果查询要选择多条记录,那么聚类是可选项。统计通常是基于直方图的统计,是数据库领域中的基本概念。然后数据库对数据进行聚类,并执行查询中提供的操作。在操作结束时,结果数据被投射到客户端。
在一种实施方式中,在将数据投射到客户端后,聚类后数据由系统保留。这种保留被称为“集群缓存”。集群缓存的细节在下文章节中进行阐述。
在一种实施方式中,当第二(或另外的或新的)查询从客户端到达数据库/数据库服务器时,数据库确定该查询是否可以使用聚类或集群缓存。如果查询可以使用集群缓存,数据库服务器检查聚类后信息是否已在集群缓存中可用。如果数据已经可用,那么数据库服务器将重用集群缓存中的信息。
在一种实施方式中,如果聚类后数据已在集群缓存中可用,可以重用来自集群缓存的聚类后数据,并且如果可用,重用聚类后数据用于新查询的处理。
在一种实施方式中,集群缓存使用增量缓存更新模型进行更新。
在一种实施方式中,接收的数据库查询的性质是数据库查询的从包括以下各项的组中选择的特征:(ⅰ)groupby子句的属性,(ⅱ)where子句的属性,(ⅱ)join子句的属性,(ⅳ)having子句的属性,以及(v)分组聚合函数的属性。
在一种实施方式中,统计是基于直方图的统计。统计传统上在所有dbms中进行计算。这些统计可以是基于采样的并存储为直方图。统计的经典用法是“选择性估算”。本发明使用相同统计对数据进行聚类。用于选择性估算的该直方图在以下文献中进行了阐述:“用于范围谓词的选择性估算的改进的直方图”,poosala、viswanath等人,acmsigmod档案,第25卷,第2篇,acm,1996。在一种实施方式中,本发明可以使用本发明中的仅一种查询统计,即“选择性统计”。它们是随机抽样的统计。一种随机抽样是以下文献中阐述的蓄水池随机抽样:维特、杰弗里s,“利用蓄水池的随机抽样”,acm数学软件会报(toms)11.1(1985):第37至57页。
在一种实施方式中,聚类通过从基于基数的聚类,或基于散列的聚类,或其任意组合中选择的用于聚类的技术中的任何一种执行。
在一种实施方式中,基于系统的配置,聚类后数据包括存储在数据库的表中的全局行id或记录,或存储在数据库的表中的记录的子集中的至少一种。
在一种实施方式中,数据元素包括表id、集群列、聚类模型、过滤条件、存储器亲和性,或其任意组合中的至少一种。
在一种实施方式中,查询处理由查询优化器执行。
在一种实施方式中,数据库查询中包括的分组聚合函数从count、avg、sum、min、max、variance和standard_deviation聚合函数进行选择。
在一种实施方式中,数据库查询利用sql查询语言编写,存储器是非对称存储器。
集群缓存
在一种实施方式中,为了避免并行组聚合操作的合并阶段,表记录被基于某一基数位划分成不同的组。
在一种实施方式中,表的划分确保聚合可以针对每个组独立地计算并且不需要任何合并。
在一种实施方式中,如果为每次查询执行进行分组,分组将影响组聚合的性能。因此缓存被指定用于存储频繁使用的列的聚类信息。
在一种实施方式中,基于用户输入,聚类信息可以是全局行id或实际记录或记录子集。
在一种实施方式中,当生成组聚合计划时,基于数据分布使用聚类信息将组分配给每个工作线程。
在一种实施方式中,为了提高并行算法的性能,使用了聚类机制。该聚类可以基于基数的或基于散列的。
在一种实施方式中,基于数据库服务器配置,聚类信息可以是全局行id或实际记录或记录子集。
在一种实施方式中,本发明中的技术进步通过缓存聚类后结果以避免每次特定查询到达时都进行聚类来实现。聚类是代价高昂的操作,即使它为并行算法带来显著的性能益处。
集群缓存管理
在一种实施方式中,集群缓存的大小可以通过用户输入配置值来管理,并且可以通过sql命令来增大或减小。集群缓存的大小可以以字节表示并且通常可以为10mb。
在一种实施方式中,如果缓存大小达到最大并且请求增添用于新列的集群信息的新请求到达,那么可以将最近最少或最不常用的列的聚类信息从缓存移除。
在一种实施方式中,如果接收到新的聚类信息,增添可以由用户使用sql命令完成,或者可以由优化器基于系统负载信息在内部完成。例如,假设正在执行像“selectmax(f1)t1groupbyf2”的新查询的情况。该查询可以通过来自用户的形式为“selectmax(f1)fromt1groupbyf2/*hint:clustercache*/”的提示来显式地聚类和缓存。
该查询也可以由优化器隐式地聚类和缓存。
在一种实施方式中,集群信息被基于numa节点的数量以及其它系统配置存储在单独的存储器位置。
在一种实施方式中,当系统数据变化时,可以为新修改的数据拍摄快照并对集群信息进行增量更新以减少写操作的开销。本领域技术人员可以理解,缓存的关键问题之一是何时更新缓存。针对这一问题的简单的方法是周期性地,例如1分钟一次,删除缓存并通过扫描所有相关行来重建缓存。如果缓存具有10m数据,那么这种方法要求写入10m。本发明提供了使用针对基于直方图的缓存的差异更新的方法。在一个示例中,以下专利中提供了一种差异更新的想法:chaudhuri、surajit、rajeevmotwani和viveknarasayya,“用于数据库系统的使用具有交叉验证的自适应随机抽样的直方图构建”,美国专利号6,278,989,2001年8月21日。
在一种实施方式中,集群如集群缓存章节中所描述的那样进行缓存。当对数据库的写入发生时,可能缓存数据没有反映当前信息。一种显而易见的选择是在数据变化时重新创建整个缓存。但这是代价高昂的。因此,本发明使得能够使用增量缓存更新模型来更新现有缓存。在这种情况下,当对数据的写入发生时,系统确定该数据是否已被缓存。这可以通过在前面(集群缓存)章节中提到的数据结构轻易地计算得知。如果数据已被缓存,对缓存进行合适的修改。例如,如果记录被删除,那么相应的数据也被从缓存删除。
图6示出根据本发明主题的实施例的用于从数据库请求数据的数据库查询的并行优化的方法。该方法可以在计算机可执行指令的一般上下文中描述。通常,计算机可执行指令可以包括执行特定功能或实施特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等。该方法也可以在分布式计算环境中实施,在该环境中,功能由通过通信网络链接的远程处理设备执行。在分布式计算环境中,计算机可执行指令可以位于本地和远程计算机存储介质中,包括存储器存储设备。
方法被描述的顺序并不意在被解释为限制,并且任何数量的所描述的方法框可以按任何顺序进行组合以实施该方法或可替代方法。此外,在不脱离本文中描述的主题的范围的情况下,可以将单独块从该方法中删除。另外,该方法可以在任何合适的硬件、软件、固件或其组合中实施。然而,为了便于阐述,在下文描述的实施例中,可以认为该方法是在上文描述的系统(100)中实施的。
在方框602中,接收到数据库查询,并且系统确定接收到的查询是否需要进行聚类。
在方框604中,以常规方式执行接收到的数据库查询,并且将基于执行的结果显示给用户。
在方框606中,在执行查询并且将结果显示给用户之后,系统保留聚类后数据并由此创建集群缓存。
在方框608中,当系统接收到新查询时,检查聚类后的预先存储的缓存以确定接收到查询是否可以使用来自这些缓存的聚类后数据。如果系统确定数据可以被重新用于处理查询,则它获取集群缓存以及与缓存相关联的数据以供进一步处理。
在一种实施方式中,该方法包括,如果聚类后数据已在集群缓存中可用,重用聚类后数据用于新查询的处理。
在一种实施方式中,该方法包括,使用增量缓存更新模型更新集群缓存。
在一种实施方式中,接收到的查询的性质是像join或groupaggregate、sort(orderby),或其任意组合之类的一类查询。
在一种实施方式中,聚类通过从基于基数的聚类,或基于散列的聚类,或其任意组合中选择的用于聚类的技术中的任何一种执行。
在一种实施方式中,基于系统的配置,聚类后数据包括存储在数据库的表中的全局行id或记录,或存储在数据库的表中的记录的子集中的至少一种。
在一种实施方式中,数据元素包括表id、集群列、聚类模型、过滤条件、存储器亲和性,或其任意组合中的至少一种。
在一种实施方式中,数据库查询中包括的分组聚合函数从count、avg、sum、min、max、variance和standard_deviation聚合函数进行选择。
工作示例:
示例1:在下面提供的示例中,示出系统/数据库/服务器如何可以确定查询是否可以使用聚类:
本领域技术人员可以了解并理解,存在受益于聚类的一组查询,其包括但不限于,groupaggregate、join、sort(orderby)。出于理解的目的,称这些子句为“集群子句”。这些查询基于下面给出的两个条件受益于聚类:
1.查询的集群子句的选择性是否足够高以进行划分?例如,对该查询应用过滤器,并且所得的记录仅为100。这是集群子句的选择性(100),这一选择性对于划分而言过低。
2.查询的集群子句的基数是否足够高以进行划分?例如,对该查询应用过滤器,并且所得的记录为10类。这是集群子句的基数(100),这一基数对于划分而言过低。
以上两个条件利用下述示例进行阐述:
假设表具有1m条记录。图7中示出具有方案的作为样本的一组记录。
考虑以下查询:
“selectsum(sales_value),sum(sales_piece)fromdimension_tabgroupbypdt_idwherepdt_type=‘car’;”
这里聚类子句是“groupby”(groupedaggregate)子句。表中用于产品类型“car”的条目数量形成该集群子句的选择性。类型为“car”的特定产品的种类(由pdt_id表示)形成集群子句的基数。
例如,如果在1m条记录中,只有1000辆类型为“car”的产品,那么选择性是1000。
例如,如果在1m条记录中,有1000辆类型为“car”的产品,但仅有10种“car”产品,那么基数是100。
示例2:在下面提供的示例中,描述了如何将集群缓存存储在数据库/数据库服务器中以及在查询到达时如何搜索/查找集群集的概念。
在一种实施方式中,集群缓存的结构如下给出:
从集群结构可以理解,结构主要由两部分组成:元数据和集群数据本身。集群数据是相当简单的。行的一些概念应当缓存在集群数据中。它可能是仅row_id或者可能是整个行本身。两种选择都是可行的。在以上所示示例中使用了row_id。然而,元数据比较棘手。在下表中利用示例查询对其进行阐述:
“selectsum(sales_value),sum(sales_piece)fromdimension_tabgroupbypdt_idwherepdt_type=‘car’;”
基于集群缓存的元数据,对于给定查询,可以确定它是否已经缓存。通过三个查询对此进行阐述,并且计算如下执行:
假设到达的第一查询是“selectsum(sales_value),sum(sales_piece)fromdimension_tabgroupbypdt_idwherepdt_type=‘car’;”--->q1。为这一查询建立集群缓存。
现在假设到达的第二查询是“selectsales_value,sales_piecefromdimension_taborderbypdt_idwherepdt_type=‘car’;”--->q2。可以理解这一查询适于进行聚类。对于这一查询,集群列和过滤条件与查询1匹配。因此,这一查询可以使用集群缓存中的数据。
现在假设到达的第三查询是“selectsum(sales_value),sum(sales_piece)fromdimension_tabgroupbypdt_idwherepdt_type=‘bike’;”--->q3。
可以理解该查询适于进行聚类。然而,用于这一查询的条件不与集群缓存的条件匹配。因此,这一查询无法使用集群缓存中的数据。
上文讨论的示例性实施例可以提供某些优势。虽然不要求实施本发明的各方面,但这些优势可以包括:
1.本发明中公开的机制提高了倾向于分组在同一组列中的olap查询的性能。主要益处在存在较少写入和较多查询时实现。
2.该机制公开了将中间结果缓存到分组聚合的概念。它缓存集群信息,以避免为每次查询执行进行聚类操作,从而降低查询执行的成本。
3.智能pcc的“连续etl”场景中的机制使查询的性能提高超过70%。
4.该机制使用缓存来存储组聚合操作中频繁使用的列的聚类信息/集群数据,以提高并行组聚合操作的性能。
5.该机制将聚类信息分布在不同numa节点中以避免远程读取存储器,由此提高本地存储器的利用率并减少缓存未命中。
6.该机制使用用户给出的信息来管理集群缓存,以通过系统配置控制系统存储器的使用。
7.该机制利用利用率统计来管理缓存以避免集群缓存中存在陈旧数据。
8.该机制允许用户使用sql命令来增添或移除集群信息以便为用户提高灵活性。
9.该机制通过缓存中间结果来提高组聚合执行速度从而使许多查询受益。
10.该机制为用户提供了可配置且可管理的缓存来存储关于组聚合中使用的列的聚类信息。
11.该机制使得能够从缓存清除未使用的聚类信息以便为新的聚类信息腾出空间(以便为频繁使用的列提供空间)。
虽然已经以特定于结构特征和/或方法的语言对用于使用集群缓存进行数据库查询的并行优化的系统和方法进行了描述,但应理解,所附权利要求不一定局限于所描述的具体特征或方法。而是,这些具体特征和方法作为用于使用集群缓存进行数据库查询的并行优化的系统和方法的实施的示例进行公开。