系统级查询优化 [0001] 相关申请的交叉引用 [0002] 本申请主张2012年11月30日申请的美国专利申请第13/691,213号的权利,其公开以引用的方式完整并入本文中。 背景技术 [0003] 通常期望使用许多小型计算机而非具有多个处理器及大型内存条的单个服务器来实施大型数据库。这些小型计算机通常被描述为商用硬件,这是因为与最强大的服务器相比,它们相对便宜、容易获得且易于更换。但是,尽管使用商用硬件存在优势,但是创建可扩展且高效的大型数据库仍是一大挑战性尝试。 [0004] 一种用于在商用硬件上实施大型数据库系统的技术涉及利用碎片。一般地说,碎片是负责解决较大计算问题的一小部分的计算系统。例如,当在大规模数据管理系统中使用碎片时,可将表按行划分为所谓的水平分区。每个碎片管理一个分区且响应涉及所述分区的请求和命令。这种方法可减小成本且在与传统数据库系统相比时具有更好的性能。 [0005] 但是,基于碎片的系统可能难以优化。每个碎片可包括独立的数据管理系统,其具有查询优化器,所述查询优化器能够针对在所述碎片上运行的查询产生执行计划。虽然执行计划可能被本地优化用于在所述碎片上执行,但是它无需跨所有碎片优化。由于性能特性和每个碎片管理的数据的差异,在一个碎片上高效运行的计划可能在另一个碎片上运行欠佳。 附图说明 [0006] 图1描绘利用全局查询优化的基于碎片的系统的实施方案。 [0007] 图2描绘用于使用领导者(leader)委任和比较选择全局优化执行计划的实施方案。 [0008] 图3描绘用于通过循序评估选择全局优化执行计划的实施方案。 [0009] 图4描绘用于通过投票过程选择全局优化执行计划的实施方案。 [0010] 图5描绘用于通过中央机构(central authority)选择全局优化执行计划的实施方案。 [0011] 图6描绘用于传达执行计划信息用于比较的数据结构的实施方案。 [0012] 图7描绘用于传达足以允许执行计划被执行引擎使用的执行计划信息的数据结构的实施方案。 [0013] 图8描绘使用成本调整的成本比较的实施方案。 [0014] 图9描绘使用执行计划中步骤的个别调整的成本比较的实施方案。 [0015] 图10描绘使用提示来修改查询,使得所得执行计划符合期望的全局优化执行计划的实施方案。 [0016] 图11描绘使用用于结合具有执行引擎和本地优化器的计算节点利用全局优化过程的系统的实施方案。 具体实施方式 [0017] 下列公开涉及执行计划的产生,所述执行计划跨以数据库系统、状态机、工作流引擎等形式运行的多个碎片优化。在各种实施方案中,每个碎片产生具有相关成本因子的本地优化执行计划用于供在碎片上运行的执行引擎执行。随后可调整成本因子并且将其与同其它执行计划相关的成本因子比较,以选择考虑其对整体系统的影响而优化的计划。对成本因子的调整可尤其基于由产生执行计划的碎片收集的统计数据、由其它碎片产生的统计数据和碎片的相对性能特性。可通过多种技术执行成本因子的比较,包括循序比较、投票、通过中央机构确定等。 [0018] 图1描绘全局优化过程的实施方案。一个或多个客户端应用程序经由网络100(诸如互联网)连接至基于碎片的系统。客户端应用程序经由网路100发送查询102至系统。 在说明书内使用术语查询来指用于调用计算操作的任意类型的请求或命令,所述计算操作可例如返回数据、改变数据或促使计算过程或装置的状态改变。查询102可能涉及特定碎片118或可通过可选的重定向组件104路由至此处。例如,在碎片118上运行的执行引擎 120可检索并且处理查询。在各种非限制性实施方案中,执行引擎可能是数据库、状态机或工作流程引擎。执行引擎执行一个指令集来执行查询。可能存在任意数量的交替指令集,其能够执行相同查询,每个集合具有不同成本。在各种非限制性实例中,术语成本可包括执行指令或指令集所需的时间、消耗的CPU周期的数量、工作集、内存容量、缓存容量、存储装置读取和写入性能等。成本还可能受诸如数据集中的行数或复制数据的数量的因素的影响。 为了减小执行查询的成本,执行引擎(有时通过被称作查询优化器的组件)可基于最小化或减小执行查询的预测(即估计)成本的尝试而产生本地优化执行计划。但是,虽然这种计划可能优选用于单个碎片上,但是它未必是在系统级上优化。但是,前端模块122可经由通信组件124与其它前端模块110和116共用计划信息和查询统计数据。通信组件124协调或促进碎片之间计划信息的通信,根据需要提供对计划信息和查询统计数据的调整以确定全局优化路径及实现全局优化计划的选择。注意,术语全局优化指的是使用是优选的计划且不一定描述数学上或确定性优化的计划。 [0019] 本文中描述的其它实施方案允许应用程序使用提示来优化基于碎片的系统的性能。在一个实施方案中,系统促使应用程序在其发送给碎片的查询中包括改变查询在碎片上的执行方式的指令。在另一个实施方案中,系统可能促使应用程序包括直接控制用于执行查询的执行计划的指令。 [0020] 进一步实施方案为技术人员提供用于优化数据库性能的提示和建议。例如,在接收到有关优选执行计划的提示后,软件工程师可更改应用程序程序码来将含建议的经修改查询发布给查询优化器。这些建议影响由查询优化器产生的计划,使得其符合优选的执行计划。 [0021] 本文中参考特定实例和实施方案描述本公开的各种方面,所述实例和实施方案旨在说明而非限制本公开。应了解,本文中提出的标的可实施为计算机程序、计算机控制设备、计算系统或制品,诸如计算机可读存储介质。虽然本文中描述的标的于在一个或多个计算装置上执行的程序模块的大致背景下提出,但是本领域技术人员将了解,其它实施可结合其它类型的程序模块执行。通常,程序模块包括例程、程序、组件、数据结构和执行特定任务或实施特定抽象数据类型的其它类型的结构。 [0022] 本领域技术人员还将了解,本文中描述的标的可在本文中描述的构造以外的其它计算机系统构造上实践或结合其实践,包括多处理器系统、基于微处理器或可编程的消费者电子装置、迷你计算机、主机计算机、手持计算机、个人数位助理、电子阅读器、蜂窝电话装置、专用硬件装置、网络设备和类似装置。本文中描述的实施方案也可在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理装置执行。在分布式计算环境中,程序模块可位于本地或远程内存存储装置中。 [0023] 在本说明书内,参考附图,其形成说明书的一部分且经由说明示出具体实施方案或实例。本文中的图未按比例绘制。在数个图中,相同数字代表相同元件。 [0024] 大容量数据的管理是常见的计算问题。这个问题的解决方法涉及将大数据集划分为较小集合,每个较小集合可由相对便宜的计算装置管理。每个计算装置也可能负责响应对指派给它的数据集操作的查询。如果由每个计算装置管理的数据共用相同布局或模式,那么相同查询或语义上等效形式的查询可应用于任意或所有计算装置。此外,可选择用于解决查询的相同步骤序列以用在所有计算装置上。这种序列(其可被称作执行计划)描述满足查询所需的操作集。可基于序列对个别计算装置的影响而选择序列。但是,如果依据序列对总体数据管理系统的影响(即,有关各种因素的成本,诸如响应时间、工作集、CPU周期等)选择序列而非仅依据序列对任一个计算装置的影响,那么总体数据管理系统的性能可改进。 [0025] 在设计大型数据管理系统时,通常期望在若干个较小计算装置之间分配工作负载,而非使用一个或两个较大且较昂贵的装置。每个较小计算系统可被描述为碎片,这是因为其代表总体系统的部分。碎片被分组为所谓的域,其是被组织来共同管理工作负载的碎片集合。碎片可实施在一系列计算环境上,诸如商用硬件计算机、虚拟机、计算集群和计算设备。为方便起见,任意这些计算装置或环境可被描述为计算节点。 [0026] 通常,每个碎片运行完全独立的执行引擎,诸如数据库系统,所述执行引擎可具有至它自己的专用处理器、内存和存储装置的访问权。采用这种类型的独立架构的系统具有良好的扩展性且与共用关键组件的系统相比也更具弹性。即使域中的个别碎片已停止工作,独立架构仍允许系统作为一个整体继续运行。但是,本领域一般技术人员将了解,偏离纯独立架构偶尔是期望或必要的。例如,包括较大型系统的碎片通常将共用共同的网络基础设施。虽然这种情况下的网路代表单个故障点,但是它们与易发生误差的组件(诸如存储子系统)相比通常相对稳健。因此,使用共同网络允许碎片之间的通信,同时保留独立架构的大多数优点。 [0027] 可采用若干可行方法来使用基于碎片的架构构建数据管理系统。在一个方法中,数据表按行分区,其中向特定碎片指派每个行范围。碎片处置检索或存储具有属于指派给所述分区的值范围内的值的数据的所有请求。这种方法被称作水平分区。作为一个实例,考虑含顾客信息的表。顾客表可基于顾客的姓水平分区。在两个碎片的域中,姓以‘A’至‘M’开头的顾客可被指派至第一碎片且姓以‘N’至‘Z’开头的顾客可被指派至第二碎片。 [0028] 在一些情况下,域所维持的所有表将被水平分区。但是,许多其它配置是可行的。 一些表可被水平分区而其它表在碎片之间复制。在其它情况下,水平分区的表被复制作为防止硬件故障的保护手段。 [0029] 在表被水平分区时,每个碎片将托管具有相同模式但含有不同数据集的表。换句话说,托管在每个碎片上的水平分区表共用相同的列布局但含有不同数据行。因为每个碎片上的表共用共同的模式,所以可不考虑最终将对哪个碎片执行查询写入查询。 [0030] 为了利用共同的模式,提供用于将查询路由至含有所需数据的碎片的手段,如果请求涉及横跨多于一个水平分区的数据的请求,那么可能涉及多个碎片。将查询路由至正确碎片的方法的三个非限制性实例如下。第一种方法涉及集中式主机,其将查询路由至适当碎片。当集中式系统接收到查询时,它确定查询中可能涉及的分区的范围。它随后可将查询转发至托管所述分区的碎片,组合结果并且将所述结果转发至客户端。在第二种方法中,任意碎片可接收到请求并且以类似于刚才描述的方式处理所述请求。应用程序可初始将请求发送至托管最可能含有所需数据的分区的碎片。在第三种方法中,应用程序完全了解碎片和分区模式并且将单独的查询直接发送至每个所需碎片。 [0031] 当数据管理系统执行查询时,其可执行一系列步骤,诸如表扫描、索引扫描和散列表查找,所述步骤是产生查询结果所需的内部操作。共同地,这些步骤描述数据管理系统执行查询所采用的路径。更一般来说,所述步骤是由执行引擎用于执行查询的一个指令集并且在本说明书中被称作术语执行计划或简称术语计划。在数据库的背景下,执行计划可被称作例如访问路径或查询计划。通常存在针对相同查询的许多不同的可行执行计划。每个执行计划能够产生相同结果,但其性能特性可能显著变化。注意,术语查询指的是对数据或将执行的命令的请求。此外,单个查询可具有许多不同形式,所有形式可使用相同执行计划执行。例如,相同查询可使用不同的语言、变化的文本格式表达或通常可含有直至命令被执行时才供应的参数化值。对于所有这些情况,相同的执行计划可用于执行所有形式的查询。 [0032] 执行计划也可由其它类型的执行引擎(诸如状态机或工作流程处理器)使用。例如,状态机可包括一系列可行的状态转换,每个状态转换具有相关成本。在从状态‘A’移动至状态‘Z’时可能穿越不同路径,每个路径可具有不同成本。 [0033] 为了确定用于在特定碎片上执行查询的优选计划,被称作查询优化器的组件评估下列每个可行的执行计划的预测成本。执行计划中的每个步骤与预测(即,估计)成本相关,考虑诸如其执行步骤所花的时间或其消耗的计算资源的因素。执行执行计划的总预测成本可基于其组成步骤的成本计算。可通过考虑特定分支被执行的可能性及相应地调整成本因子而将分支和循环考虑在内。通常,总预测成本将被表达为无单位标量值或时基估计值。注意,术语预测成本还可被描述为估计成本且不一定是实际发生的成本的准确预测。 [0034] 一旦预测成本已知,就可通过选择具有最便宜总成本的执行计划而选择优化执行计划。也可考虑除成本以外的其它因素。例如,有时期望选择一个计划,即使在总体计划效率不高的情况下,所述计划仍快速返回初始的结果集。 [0035] 可通过使用各种统计数据而改进成本计算的准确度。这些可包括诸如表中的行数或列中的唯一值数的值。统计数据也可包括与相同执行计划的先前执行相关的测量值。数据可为一般性质,诸如执行给定执行计划花费的总时间或数据可能更精细,诸如执行表扫描时所涉及的磁盘读取次数。此外,统计数据可反映执行计划的哪个分支在实践中最常被执行,从而改进成本预测的准确度。 [0036] 但是,这种方法的功效受限于基于碎片的系统。每个碎片是独立的且具有它自己的查询优化器和统计数据集。因此,在给定碎片上,查询优化器将产生本地优化但不一定全局优化的执行计划。全局优化计划将最大化总体系统性能,考虑诸如每个碎片上给定执行计划的成本和所述执行计划在每个碎片上执行的相对频率的因素。但是,本地产生计划的预测成本可能是误导的,这是因为预测成本仅反映产生所述计划的系统的特性。 [0037] 一种用于标识全局优化执行计划的一般方法涉及在域中的每个碎片上产生本地优化计划且随后比较每个计划的成本以确定哪个被全局优化。各种方法可用于比较成本,诸如执行每个计划的预测成本的直接比较或用于本说明书中所公开的比较的其它实施方案。也可针对确定全局优化执行计划的其它方面采用各种方法,诸如每个碎片何时产生本地优化执行计划,如何共用有关计划的信息和其它碎片如何利用全局优化计划。 [0038] 在一个实施方案中,碎片被指定为领导者且广播有关其本地优化执行计划的信息。如果另一个碎片将所广播计划与它自己的计划比较并且发现它自己的计划更佳,那么所述碎片可将它自己的计划指定为领导者并且广播有关它自己的计划的信息。这个过程继续直至无碎片能够提供比当前领导者计划更佳的计划。过程结束时的领导计划被视为被全局优化。 [0039] 图2描绘全局优化过程的实施方案。虽然被描述为操作序列,但是本领域一般技术人员将了解,各种实施方案可添加、移除、记录或修改所描绘的操作。在操作200中,碎片接收到有关当前被指定为领导者的执行计划的信息。信息可类似于通过图4描述的数据结构。 [0040] 在操作202中,碎片首先确定它是否应将领导计划与它自己的、本地产生计划比较。在一些情况下,在接收到领导计划的信息时,尚未产生本地计划。在这些情况下,可采取若干方法。各种非限制性实例包括立即产生新计划或在不比较的情况下接受领导计划。 在一些实施方案中,碎片可首先开始利用领导计划,同时在稍后时点产生它自己的计划且随后将所述计划与当前的领导计划比较。替代地,碎片可被配置来从不产生执行计划用于比较。 [0041] 如果操作202确定应执行比较,那么碎片针对对应于当前的领导计划的查询产生或检索它自己的计划。随后在操作204中使用多种手段之一比较两个计划,包括用于比较本文中描述的执行计划的实施方案。如果本地计划更佳(操作206),那么碎片将开始使用或保持使用它自己的本地产生计划(操作210)。将计划指定为领导者(操作212)且将有关计划的信息广播至其它碎片(操作214)。返回操作206,如果本地产生计划并非更佳,那么碎片采用领导计划而非它自己的计划(操作208)。 [0042] 如果操作202确定无需执行比较,那么碎片可立即开始使用领导计划。这种方法可能是有利的,因为它允许碎片使用预先存在的计划而无需在产生本地计划的同时暂停查询执行。碎片随后可在稍后的时间产生它自己的计划,诸如在碎片另外空闲时。 [0043] 在另一个实施方案中,可通过循序评估由碎片产生的执行计划而选择领导者。初始被指定为领导者的碎片可将执行计划信息直接发送至第二碎片,所述第二碎片将领导者的执行计划与它自己的执行计划比较。如果第二碎片确定它的计划更佳,那么所述第二碎片将自己指定为领导者且将有关所述计划的信息发送至第三碎片。另外,第二碎片将原始执行计划信息转发至第三碎片。这个过程继续直至由每个碎片持有的执行计划已被评估且序列中的最后一个碎片将最后的领导计划指定为全局优化计划。 [0044] 图3描绘通过循序评估的全局优化的实施方案。第一碎片产生本地优化执行计划并且在假设所产生的第一计划是全局优化计划的情况下,将有关计划的信息发送至第二碎片(操作300)。第二碎片产生它自己的计划(操作302)或检索先前针对相应查询产生的计划。在操作304中,可确定成本因子来允许计划的估计成本之间的可靠比较。随后在操作 304中比较外部接收和本地产生的计划。第二碎片随后可将优选的计划转发至下一个碎片(操作306)且过程重复直至所有碎片已能够评估执行计划且已确定全局优化计划(308)。 在操作310中,碎片获得并且开始利用全局优化计划。 [0045] 进一步实施方案通过投票过程执行全局查询优化。可基于多种因素向每个碎片指派若干选票,且每个碎片可为它自己的计划投票使其被选择为领导者。可能影响碎片可获得的投票数的因素包括碎片的执行计划的成本、各自查询执行的频率和碎片硬件的性能特性。 [0046] 图4描绘用于通过投票过程选择全局优化查询的系统。每个碎片400含有前端模块402,各种子模块可一体化至所述前端模块402中。本领域一般技术人员将了解,术语模块可指抽象的功能单元,其在使用构件(诸如电路或存储在内存中且由处理器执行的软件指令)时实施。模块可一体化至另一个过程、程序或电路中。模块也可被并入另一个模块中作为功能子单元。 [0047] 在实施方案中,选票计算模块404一体化至前端模块402中。选票计算模块404参考统计模块408而确定可获得的投票数,所述统计模块408接着可从数据库410和碎片的操作系统412获得统计数据。在实施方案中,参考查询成本、碎片硬件的性能特性、存储在碎片上的数据的数量和类型和在碎片上执行查询的相对频率的一个或多个而按每个查询确定投票数。 [0048] 投票协调模块420启动投票过程。虽然单独描绘在图4中,但是投票协调模块可一体化至任意模块中,诸如前端模块402。如果这样,那么每个碎片可含有一个投票协调模块420,但是在任意给定期刻仅一个是活动的。 [0049] 当投票过程开始时,每个投票模块406获得可从选票计算模块404获得的选票数。 投票模块406随后将投票信息发送至投票协调模块420。投票信息含有足够信息来允许其它碎片随后请求执行计划,前提是投票是成功的。这种信息可包括碎片标识符、执行计划标识符和指示针对所述执行计划投的票数的值。如所示,投票模块406的可投票数受限于由选票计算模块404确定的数量。 [0050] 当每个投票模块406已投票后,投票协调模块420选择具有最多选票的查询计划。 在一些实施方案中,两个或更多个投票模块406可为相同执行计划投票。如果这样,它们的投票可被加在一起,且所述值用于确定获胜计划。 [0051] 在确定获胜计划后,投票协调模块420向每个碎片告知结果并且通过经由计划信息模块430获得计划信息并且将信息转发至每个碎片而为碎片提供足够的信息来开始使用计划。其它实施方案可利用不同的手段向碎片告知优选的计划及用于启动优选计划的使用。 [0052] 也可由中央机构确定全局优化执行计划。在实施方案中,每个碎片将有关它的执行计划的信息发送至中央机构,所述中央机构评估并且比较每个计划。中央机构确定全局优化计划并且将有关所述计划的信息广播至每个碎片。 [0053] 图5描绘通过利用中央机构确定全局优化执行计划的实施方案。碎片500将优化信息520发送至中央机构510。优化信息可包括查询计划信息、查询统计数据和硬件特性信息的一个或多个。执行计划信息可由类似于图6中描绘的数据结构表示。中央机构510随后可根据用于如本文中描述比较执行计划的成本的各种实施方案比较每个计划的成本并且选择最便宜的计划。 [0054] 一些优化信息520可在成本比较前的时刻传输。中央机构510可从每个碎片500主动检索因子。替代地,每个碎片500可基于多种触发因子传输优化信息520的方面。在各种实施方案中,相关因素可例如定期或在信息已显著改变时传输。 [0055] 在各种实施方案中,必须采用通信机构来分配有关执行计划的信息。虽然全局优化计划的选择在进行中,但是可优选地传输有关所述计划的有限数量的信息。所传输信息因此可限于在计划之间比较所需的信息。可采用各种手段来传输信息,诸如广播或点对点通信。在已选择全局优化计划后,可能需要更完整信息来允许利用计划。尤其广播和点对点通信可用于传达这种信息。但是,由于涉及相对大量数据,点对点通信可能是优选的。 [0056] 图6描绘含有可用于比较执行计划的信息的数据结构600的实施方案。各种实施方案可利用这种或类似结构用于在碎片之间发送计划信息。本领域一般技术人员将了解包括数据结构的元件只是说明性的。替代实施方案可移除、替换或添加本文中描述的元件。 [0057] 源标识符602标识执行计划信息的源,所述源可为上方产生计划的碎片。标识符可为任意类型的值,其用于标识源,诸如全局唯一标识符、统一资源定位符和互联网协议地址。在实施方案中,在接收碎片确定发送者具有优选计划时,它可从标识为602的源请求有关计划的额外信息。 [0058] 执行计划标识符604标识执行计划。它可能是用于标识执行查询计划的任意类型的值(诸如全局唯一标识符),且可在请求中用于从标识为402的源获得有关所标识执行计划的完整信息。 [0059] 查询标识符606用于标识应用计划的查询。它可能是用于标识查询的任意类型的值,诸如全局唯一标识符或查询本身的文本。 [0060] 域标识符608指示碎片所属的域。在这个背景下,域指的是参与确定全局优化查询的一组碎片。通常,域将对应于针对给定表的所有水平分区,但是其它配置可能是有利的。包括域的碎片不一定包括管理分区表时所涉及的所有碎片。 [0061] 成本指示符610提供计划成本的测量值。成本指示符可能是简单的标量值、标量值的一个或多个矢量或传达成本信息的其它手段。在实施方案中,成本指示符是对应于包括执行计划的步骤集合中的步骤的值的矢量。 [0062] 图7描绘用于传输更完整的执行计划信息的数据结构700的实施方案。结构旨在含有足够信息以允许碎片开始使用执行计划以执行相应查询。一般来说,这种信息的传输成本比比较计划所需的信息更高。因此,可能优选地仅在执行计划已被确定优化之后传输有关所述执行计划的详细信息。 [0063] 数据结构700可含有执行计划的源的标识符702,其可为用于标识源的任意类型的值,诸如全局唯一标识符、统一资源定位符和互联网协议地址。第二标识符704标识计划本身,且可为用于标识计划的任意类型的值,诸如全局唯一标识符。第三值706标识计划适用的查询。它可能是用于标识查询的任意类型的值,诸如全局唯一标识符或查询本身的文本。 [0064] 此外,数据结构可含有元数据708,其代表足够详细以将执行计划载入碎片的查询优化器的执行计划。这可包括执行计划细节710。在一些实施方案中,可经由应用程序编程界面将元数据提供至数据库。数据库将在编程界面被调用后使用所供应的执行计划处理相应的查询。 [0065] 多种手段可用于比较两个执行计划的预测成本。在一些情境中,在无任何调整的情况下,直接比较由查询优化器提供的成本数字可能是有利的。但是,多种因素可能使未调整的成本比较变得误导。例如,即使相关执行计划在具有较慢处理器的域中的碎片上执行欠佳,一个碎片上的相对较快的CPU性能仍可能降低由所述碎片的查询优化器产生的成本估计值。 [0066] 在实施方案中,可基于产生执行计划的碎片的性能特性调整每个执行计划的成本数字。标量成本数字可乘以调整因子以产生适于与其它碎片比较的经调整成本数字。调整因子可能基于碎片的总体性能特性。可采用许多性能和数据库度量,诸如CPU速度、内存容量、存储装置读取性能、存储装置写入性能、存储装置寻道时间、行数和数据复制。 [0067] 图8描绘能够进行成本比较的实施方案。每个碎片800产生具有相关未调整成本 802的执行计划。每个碎片基于查询统计数据806和性能特性808的一些组合计算调整因子804。图中未描绘的其它因子(诸如技术人员的手动调整)也可用在计算中。通常,未调整成本802乘以调整因子804以产生经调整成本810,但是其它数学或逻辑运算可用于产生经调整成本810。随后通过比较函数820比较来自每个执行计划的经调整成本810以产生结果822。 [0068] 图9描绘基于相关性能特性调整访问计划的个别组成部分的成本的实施方案。以此方式,可通过对更可能影响成本计算的特性加权重而使成本调整更准确。例如,与CPU速度相比,全表扫描更可能受碎片的磁盘驱动器的性能的影响。因此,主要基于硬盘性能而非CPU的速度调整表扫描的成本因子。 [0069] 执行计划900含有多种操作类型902至914。每个操作类型具有相关的未调整成本,其反映所述类型的所有操作的总成本。可通过使用参考相关统计数据和性能特性920确定的相关成本调整因子930而调整每个未调整成本。确定中所使用的统计数据和性能特性集合可根据调整因子所相关的操作类型而改变。例如,可仅基于CPU速度922或主要基于CPU速度922,以工作集926作为辅助考虑而调整与散列访问操作类型910相关的调整因子930。也可考虑许多其它类型的度量。除相对静态的测量(诸如物理内存或CPU速度的数量)外,可收集并且使用动态性能度量。各种非限制性实例是工作集、CPU利用率、平均磁盘队列深度等。也可考虑通过执行引擎收集性能度量。在数据库的背景下,各种非选择性实例包括缓存一致性测量、用户会话的平均数量和各种事件日志项。 [0070] 在各种实施方案中,定期重新计算优化的执行计划。可能由于域中的碎片上变化的条件而需要重新计算。例如,在操作期间,碎片可能存储额外数据,可能导致碎片域内数据的分布改变。如果这样,曾经所谓的全局优化执行计划可能已变得无效且可能变得需要新确定全局优化执行计划。 [0071] 全局优化执行计划的新确定可以类似于初始采用的方式进行。在实施方案中,每个碎片重新计算它自己的本地优化执行计划且根据本文中描述的各种实施方案选择全局优化计划。但是,在一些情况下,可能期望仅重新计算本地优化计划的子集。在实施方案中,每个碎片可仅在一些特性集合(诸如表尺寸)已改变超出阈值数量的情况下确定新的本地优化计划。 [0072] 全局优化执行计划的重新计算可通过多种事件或条件触发。例如,它可被定期触发,诸如每周一次。替代地,这可以机会主义在一个或多个碎片空闲时完成。在一个实施方案中,当碎片另外闲置时,碎片重新计算它的本地优化执行计划并且仅在本地优化计划的成本已显著改变的情况下触发全局优化计划的重新计算。用于重新计算全局优化计划的其它触发事件包括在存储在碎片上的数据量已显著变化或当碎片的硬件配置已改变时。 [0073] 基于碎片的架构的一个优点在于在需要额外容量时可添加新的碎片。但是,新的碎片在其建立统计数据的缓存并且产生新执行计划的同时可能欠佳地执行。新碎片自动填充已确定为全局优化的执行计划将是有利的。随后,新碎片可计算本地优化执行计划且本文中描述的用于确定全局优化执行计划的实施方案随后可结合新碎片执行。 [0074] 在一些实例中,客户端应用程序将发布差不多跨系统中的碎片均匀执行的查询。 这易于在应用程序请求跨指派给每个碎片的水平分区均匀分布的数据时发生。在其它情况下,客户端应用程序可能发布朝向单个分区严重偏斜的查询。在后一种情况下,可通过允许个别应用程序针对以其为代表执行的查询重写全局优化执行计划而改进总体系统性能。 [0075] 在其它实施方案中,系统可供应提示至客户端应用程序。提示可包括影响执行计划的产生和查询本身的执行的建议。提示可例如建议在执行特定查询时,全表扫描优于索引扫描。许多其它类型的提示是可行的并且予以设想。可通过多种手段确定供应至客户端应用程序的提示。在一个实施方案中,基于成本减小评估潜在提示。可为客户端应用程序提供优化跨域的重复查询执行的成本的提示。客户端随后在其执行查询时,可包括所供应提示。当碎片接收到查询时,它处理提示并且以与域的优化性能一致的方式执行查询。本领域一般技术人员将了解,可实践刚才描述的实施方案作为本申请案中描述的其它实施方案的补充或替代。 [0076] 客户端应用程序可以多种方式接收提示。可采用广播系统以将提示发送至一个或多个相关客户端应用程序。这种方法具有能够在新提示或不同提示产生时重新广播更新的优点。替代地,每个应用程序可直接请求可获得的提示。也设想适于特定硬件和软件环境的额外实施方案。 [0077] 在进一步实施方案中,可从基于碎片的系统供应提示给工程师和其它技术人员。 在实施方案中,碎片可供应指示它的计划比当前选择的全局优化计划成本明显更低的提示,建议可能需要全局优化计划的重新计划或其重写。可以多种方式将提示传输给用户。非限制性实例包括存储在可由预期用户访问的硬盘驱动器上,经电子邮件或消息发送或置于队列中供后续处理。 [0078] 在其它实施方案中,系统可供应提示供软件工程人员使用,其允许客户端应用程序的优化。提示可建议工程师手动修改从客户端应用程序发送至基于碎片的系统的查询。 提示可例如根据全局优化执行计划的确定,建议对于特定查询而言,索引扫描优于全表扫描。软件工程师随后可修改应用程序,促使它发布更可能符合期望全局优化计划的查询。在其它实施方案中,提示也可用于改变执行查询的其它方面。例如,提示可直接或间接指示应在特定碎片上执行查询或应避开特定碎片。提示还可表明查询需要跨多个碎片的执行,向人员建议需要查询的重新制定。 [0079] 图10描绘这种方法的实施方案。虽然被描绘为操作序列,但是本领域一般技术人员将了解,操作顺序可能改变且可添加、修改或移除操作。 [0080] 在操作1000中,基于碎片的系统接收并且处理来自客户端应用程序的查询。随后在操作1002中产生全局优化执行计划。但是,取代直接促使碎片采用查询,系统可能将有关全局优化执行计划的信息发送给工程人员(操作1004)。信息可包括足以允许工程师对应用程序进行期望修改的执行计划的描述或说明。它可例如包括优化执行计划的指令集和相关成本的描述。 [0081] 在操作1006中,系统接收到根据操作1004中提供的信息修改的查询。随后针对经修改查询产生新的查询计划(操作1008)。由于对查询进行的修改,以与期望的全局优化计划一致的方式产生新的执行计划。为了进一步说明,即使未修改计划在其被查询优化器处理时导致索引扫描,提示仍可指示全局优化执行计划将使用全表扫描而非索引扫描。经修改查询包括向查询优化器指示全表扫描是优选的指令。因此,查询优化器使用全表扫描产生执行计划且所得查询与期望的全局优化计划一致。在新计划产生后,可使用所述计划执行查询(操作1010)。 [0082] 为了说明的目的,本文中描述的一些实施方案涉及具有水平分区数据的数据管理系统。但是,本领域技术人员将了解,本公开的方面可应用于未涉及传统数据库的系统。实例包括但不限于状态机和工作流程引擎。图11描绘可应用本文中描述的全局优化技术的实施方案。第一计算节点和第二计算节点1100能够接收并且处理共同命令1120。命令可为任意类型,前提是它能够在域中的多个计算节点上执行且可分解为总成本可被估计的步骤序列。状态机和工作流程引擎是处理符合这些标准的命令的系统的实例。两者由具有相关转换的一组状态组成。执行查询包括从当前状态至已执行命令的状态的一个转换集。能够达到命令完成状态的任意碎片能够处理命令且可基于达到所述状态所需的所有转换的估计成本估计这样做的成本。执行引擎可通过遵从例如由查询优化器选择的优化或其它优选计划促使期望的转换集发生而执行查询。每个碎片管理的数据可管理经分区数据集的分区,使得碎片的域共同管理整个集合。分区可能重叠,使得一些或甚至所有数据在碎片之间重复。数据集可包括任意类型的数据,包括但不限于表、矢量、阵列、曲线图等。 [0083] 通过本地优化器1102确定步骤序列和预测成本。比较模块1130参考诸如执行统计数据、相对软件性能特性和每个系统执行共同命令的相对频率的因素而比较两个计划的预测成本。比较结果是优选的执行计划1140,其可如优选执行计划1140与执行引擎1104之间的连接箭头所描绘由执行引擎1104利用。也可采用诸如结合供应提示给应用程序或技术支持人员使用优选计划的其它各种实施方案。 [0084] 先前段落中描述的每个过程、方法和算法可体现在由一个或多个计算机或计算机处理器执行的代码模块中且完全或部分通过所述代码模块而自动化。代码模块可存储在任意类型的非暂时性计算机可读介质或计算机存储装置上,诸如硬盘驱动器、固态存储器、光盘和/或类似物。过程和算法可部分或完全实施在专用电路中。所公开过程和过程步骤的结果可永久或以其它方式存储在任意类型的非暂时性计算机存储器中,诸如,例如易失性或非易失性存储器。 [0085] 此外,可参考下列条款了解一个或多个上述实施方案: [0086] 1.一种系统,其包括: [0087] 第一计算节点,其被配置来操作第一执行引擎,所述第一执行引擎包括经分区数据集的第一分区; [0088] 所述第一计算节点被配置来操作第一查询优化器,所述第一查询优化器可操作以确定在所述第一执行引擎上执行查询的第一计划,所述查询涉及所述经分区数据集; [0089] 第二计算节点,其被配置来操作第二执行引擎,所述第二执行引擎包括所述经分区数据集的第二分区; [0090] 所述第二计算节点被配置来操作第二查询优化器,所述第二查询优化器可操作以确定在所述第二执行引擎上执行所述查询的第二计划;和 [0091] 优化器,其被配置来确定是否应将执行所述查询的所述第一计划或执行所述查询的所述第二计划用于在所述第一执行引擎和所述第二执行引擎上执行所述查询。 [0092] 2.根据条款1所述的系统,其中所述执行引擎是数据库。 [0093] 3.根据条款1所述的系统,其中所述优化器被配置来通过比较执行执行查询的第一计划的第一成本与使用执行查询的第二计划的第二成本而确定是否应使用执行所述查询的所述第一计划或所述第二计划。 [0094] 4.根据条款3所述的系统,其中所述优化器被配置来通过基于所述第一计算节点和所述第二计算节点的特性调整所述第一成本和所述第二成本而确定是否应使用执行查询的所述第一计划或所述第二计划。 [0095] 5.根据条款1所述的系统,其中所述第二节点被配置来接收指示执行所述查询的所述第一计划的信息。 [0096] 6.根据条款1所述的系统,其中所述第二计算节点被配置来基于所述优化器的所述确定而使用执行所述查询的所述第一计划执行所述查询。 [0097] 7.根据条款1所述的系统,其中所述查询是参数化查询。 [0098] 8.根据条款1所述的系统,其中所述优化器被配置来基于从所述查询的先前执行和所收集的性能度量确定的统计数据中的一个或多个确定是否应将所述第一执行计划或所述第二执行计划用于执行所述查询。 [0099] 9.一种用于执行数据库查询的方法,其包括: [0100] 接收指示执行用于在第一计算节点上执行所述数据库查询的第一指令集的第一估计成本的信息,所述第一指令集以由所述第一计算节点确定的方式执行所述数据库查询; [0101] 接收指示执行用于在第二计算节点上执行所述数据库查询的第二指令集的第二估计成本的信息,所述第二指令集以由所述第二计算节点确定的方式执行所述数据库查询;和 [0102] 通过比较所述第一估计成本和所述第二估计成本确定是否将所述第一指令集或所述第二指令集用于在所述第一计算节点和所述第二计算节点中的至少一个上执行所述数据库查询。 [0103] 10.根据条款9所述的方法,其中比较所述第一估计成本和所述第二估计成本还包括针对所述第一计算节点和所述第二计算节点的性能特性进行调整。 [0104] 11.根据条款10所述的方法,其中所述性能特性包括下列一个或多个项目:处理器速度、存储装置速度、可用内存、工作集、CPU利用率、平均磁盘队列深度、缓存一致性测量、用户会话的平均数和事件日志项。 [0105] 12.根据条款9所述的方法,其中比较所述第一估计成本和所述第二估计成本包括针对由所述第一计算节点和所述第二计算节点管理的数据的特性进行调整。 [0106] 13.根据条款12所述的方法,其中所述数据特性包括数据行数和数据重复频率的一个或多个。 [0107] 14.根据条款9所述的方法,其中比较所述第一估计成本和所述第二估计成本包括基于所述第一计算节点或所述第二计算节点的特性相对于所述至少一个指令的所述估计成本调整所述第一指令集或所述第二指令集中的至少一个指令的估计成本。 [0108] 15.根据条款9所述的方法,其中所述第一计算节点向所述第二计算节点传输指示执行所述第一指令集的估计成本的信息。 [0109] 16.根据条款9所述的方法,其中由所述第一计算节点或所述第二计算节点中的至少一个执行确定是否使用所述第一指令集或所述第二指令集。 [0110] 17.根据条款9所述的方法,其中所述查询涉及分区表且查询优化器确定所述第一指令集。 [0111] 18.根据条款9所述的方法,其中所述成本依据下列各项中的至少一个:计算能力、CPU速度、内存容量、缓存容量、存储装置读取性能、存储装置写入性能、存储装置写入性能、存储装置寻道时间、行数和数据复制。 [0112] 19.根据条款9所述的方法,其中在触发事件之后执行确定是否使用所述第一指令集或所述第二指令集。 [0113] 20.根据条款19所述的方法,其中所述触发事件包括下列各项中的一个或多个: 周期事件、硬件组件的变更、硬件配置的变更和存储在系统上的数据的变更。 [0114] 21.一种非暂时性计算机可读存储介质,其具有在其上存储的计算机指令,所述计算机指令在由计算装置执行时,促使所述计算装置至少: [0115] 接收执行查询的第一成本的估计,所述第一成本包括在第一计算节点中执行第一指令集的估计成本的确定; [0116] 估计执行所述查询的第二成本,所述第二估计成本包括在第二计算节点上执行第二指令集的估计成本的确定; [0117] 在针对所述第一计算节点和所述第二计算节点的相对特性调整后将所述第一成本与所述第二成本比较,且确定所述第一指令集优选用于在所述第一计算节点和所述第二计算节点上执行所述查询。 [0118] 22.根据条款21所述的非暂时性计算机可读存储介质,其具有在其上存储的指令,所述指令在由计算装置执行时,促使所述计算装置至少: [0119] 将所述第一指令集与所述查询关联,使得所述查询,在所述第二计算节点上执行时使用所述第一指令集执行。 [0120] 23.根据条款21所述的非暂时性计算机可读存储介质,其具有在其上存储的指令,所述指令在由计算装置执行时,促使所述装置至少: [0121] 将所述第一指令集与所述查询关联,使得所述查询在于第三计算节点上执行时使用所述第一指令集执行。 [0122] 24.一种非暂时性计算机可读存储介质,其具有在其上存储的指令,所述指令在由计算装置执行时,促使所述计算装置至少: [0123] 从查询优化器获得用于在第一计算节点上执行查询的第一计划; [0124] 从查询优化器获得用于在第二计算节点上执行所述查询的第二计划; [0125] 比较执行用于执行所述查询的所述第一计划和所述第二计划的预测成本; [0126] 基于所述比较,确定用于执行所述查询的所述第一计划或所述第二计划中的哪一个是优选的;和 [0127] 发送指示用于执行查询的所述优选第一计划或第二计划的信息。 [0128] 25.根据条款24所述的非暂时性计算机可读存储介质,其中所述信息被传输至客户端应用程序。 [0129] 26.根据条款24所述的非暂时性计算机可读存储介质,其中所述信息被传输给用户,所述传输包括存储装置、队列或消息系统中的一个或多个。 [0130] 27.根据条款24所述的非暂时性计算机可读存储介质,其中所述信息包括用于修改所述查询以促使查询优化器产生用于执行与用于执行所述查询的所述优选第一计划或第二计划一致的所述查询的计划的建议。 [0131] 28.根据条款24所述的非暂时性计算机可读存储介质,其中所述信息包括用于将所述查询路由至特定计算装置的建议。 [0132] 上文描述的各种特征和过程可独立于彼此使用或可以各种方式组合。所有可行的组合和子组合旨在属于本公开的范围内。此外,在一些实施中可省略特定方法或过程块。本文中描述的方法和过程也不限于任意特定序列且与其相关的块或状态可以适当的其它序列执行。例如,所描述的块或状态可以具体公开以外的顺序执行或多个块或状态可组合在单个块或状态中。示例性块或状态可以串列、并列或一些其它方式执行。块或状态可添加至所公开的示例性实施方案或从其中移除。本文中描述的示例性系统和组件可以与所描述不同的方式配置。例如,元件可添加至所公开的示例性实施方案,从中移除,或可相较于所公开的示例性实施方案重新配置。 [0133] 还应了解,各种项目被图示为在被使用的同时被存储在内存中或存储器上,且为了内存管理和数据完整性的目的,这些项目或其部分可在内存与其它存储装置之间转移。 替代地,在其它实施方案中,一些或所有软件模块和/或系统可在另一个装置上的内存中执行且经由计算机间通信与所示的计算系统通信。此外,在一些实施方案中,一些或所有系统和/或模块可以其它方式实施或提供,诸如至少部分在固件和/或硬件中,包括但不限于一个或多个专用集成电路(ASIC)、标准集成电路、控制器(例如,通过执行适当指令及包括微控制器和/或内嵌控制器)、现场可编程门阵列(FPGA)、复杂可编程逻辑装置(CPLD)等。一些或所有模块、系统和数据结构也可存储(例如,作为软件指令或结构化数据)在计算机可读介质上,诸如硬盘、内存、网络或由适当驱动器或经由适当连接读取的便携式介质件。系统、模块和数据结构也可作为所产生数据信号(例如,作为载波或其它模拟或数字传播信号的部分)在多种计算机可读传输介质(包括基于无线及基于有线/电缆的介质)上传输且可呈多种形式(例如,作为单个或多工模拟信号的部分或作为多个离散数字分组或帧)。在其它实施方案中,这些计算机程序产品也可呈其它形式。因此,本发明可结合其它计算机系统配置实践。 [0134] 除非另有具体规定或在如所使用的背景内另外理解,否则本文中所使用的条件用语,尤其诸如“可(can)”、“可(could)”、“可(might)”、“可(may)”、“例如”和类似用语大致旨在传达特定实施方案包括而其它实施方案不包括特定特征、元件和/或步骤。因此,这些条件用语并非大致旨在暗示特征、元件和/或步骤以任意方式为一个或多个实施方案所需或一个或多个实施方案未必包括用于在有或无创建人员输入或提示的情况下决定这些特征、元件和/或步骤是否包括在任意特定实施方案中或将在任意特定实施方案中执行。术语“包括(comprsing)”、“包括(including)”、“具有”和类似术语是同义的且以开放方式涵盖性地使用且不排除额外元件、特征、行动、操作等。此外,术语“或”以其涵盖性意义(而非以其排除性意义)使用,使得例如在用于连接一系列元件时,术语“或”意指系列中的一个、一些或所有元件。 [0135] 虽然已描述特定示例性实施方案,但是这些实施方案仅举例而言呈现且不旨在限制本文中公开的发明的范围。因此,上文描述不旨在暗示任意特定特征、特性、步骤、模块或块是必要的或不可缺少的。实际上,本文中描述的新颖方法和系统可体现为多种其它形式; 此外,可在不脱离本文公开的发明的精神的情况下进行本文中描述的方法和系统的各种省略、替换和形式变更。随附权利要求和其等效物旨在涵盖如属于本文中公开的特定发明的范围和精神内的这些形式或修改。