系统级查询优化的制作方法
【专利说明】系统级查询优化
[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’至iV开头的顾客可被指派至第二碎片。
[0028]在一些情况下,域所维持的所有表将被水平分区。但是,许多其它配置是可行的。一些表可被水平分区而其它表在碎片之间复制。在其它情况下,水平分区的表被复制作为防止硬件故障的保护手段。
[0029]在表被水平分区时,每个碎片将托管具有相同模式但含有不同数据集的表。换句话说,托管在每个碎片上的水平分区表共用相同的列布局但含有不同数据行。因为每个碎片上的表共用共同的模式,所以可不考虑最终将对哪个碎片执行查询写入查询。
[0030]为了利用共同的模式,提供用于将查询路由至含有所需数据的碎片的手段,如果请求涉及横跨多于一个水平分区的数据的请求,那么可能涉及多个碎片。将查询路由至正确碎片的方法的三个非限制性实例如下。