优化数据库中访问路径的方法和装置的制作方法

文档序号:6442307阅读:392来源:国知局
专利名称:优化数据库中访问路径的方法和装置的制作方法
技术领域
本发明涉及数据库的访问,更具体而言,涉及优化数据库中访问路径的方法和装置。
背景技术
在数据库中进行访问和检索的过程中,为了执行查询,数据库需要创建一个访问计划(access plan)。访问计划定义按什么顺序访问表,使用哪些索引,以及用何种连接(join)方法来关联数据。好的访问计划对于SQL语句的快速执行至关重要。大多数的RDBMS(关系数据库管理系统)利用基于成本的优化器进行访问计划的创建。基于成本的优化器根据数据库中的统计信息评估各个备选访问路径的成本,从中选择成本最低的访问路径作为最优路径。上述的成本主要包括CPU执行成本,IO成本等。在计算各个备选访问路径的成本时,优化器主要根据表和索引的相关统计信息以及查询语句的过滤因子来进行评估。过滤因子表示,利用查询语句中指定的条件进行“过滤”,能够从数据库的指定范围中选择出的数据条目相比于该指定范围中的总数据条目的比例。过滤因子对于优化器创建有效的访问计划非常重要。在一个非常简单的例子里,假定数据库中存储了一份某电脑配件的销售信息统计表T,该统计表共有100行,其中95行涉及型号A,另外5行涉及型号B,在该表的第2列记载了上述型号信息。如果用查询语句SELECT*FR0M T WHERE C0LUMN_2 = ‘A’进行查询,也就是用型号=A作为谓词进行过滤,将会返回95条数据条目,过滤因子为95%。对于这样的过滤条件和过滤因子,数据库管理系统的优化器经过简单的计算就可以得出,直接扫描并判断统计表T的每一行,从中读取第二栏为A的数据条目是一种较为经济的访问路径。在另一种情况下,如果用型号=B作为谓词进行过滤,将会返回5条数据条目,过滤因子为5%。此时,优化器经过计算会得出,首先读取统计表的索引,根据索引中记录的指针直接访问第二栏为B的数据条目是较为优选的访问路径。由此可以看到,在优化器创建访问计划的过程中,过滤因子起着非常重要的作用。过滤因子的不同通常使得优化器创建不同的访问路径。并且,过滤因子的大小紧密依赖于表格中数据的分布和查询语句中指定的过滤条件的字面值(literal value),也就是以上例子中的’ A’或’ B’。然而,在许多情况下,过滤因子并不能如上述例子那样简单而直接地获得。例如,在典型的嵌入式SQL的情况下,SQL语句嵌入在主应用程序中,并在查询语句中引用主程序中的变量或参数,例如SELECT*FR0M TffHERE C0LUMN_2 = varl,其中varl是一个变量。于是,过滤条件中的字面值和过滤因子的大小直接依赖于变量的值。然而,变量的值通常在程序运行时才能确定。并且,在一些情况下,应用程序多次重复执行同一查询语句,但是每次执行该查询语句时,运行时产生的变量的值可能是不同的。由于无法在该查询语句的执行之前准确确定过滤条件中的字面值,因此提出了多种方法来估计过滤因子,从而优化访问路径。在一种访问路径优化方案中,优化器基于变量值平均分布的假设估计出一个可能的过滤因子,并基于估计出的过滤因子创建一个经济的访问路径。在确定了查询语句的访问路径之后,每次执行该查询语句时,就按照预先创建的访问路径来访问数据库。仍然参照上述电脑配件的销售信息统计表T的例子,对于查询语句SELECT*FROM T WHERE C0LUMN_2=varl,由于第二列中有两种可能值A和B,因此优化器会平均地认为,该查询语句的过滤因子为50%,并基于该过滤因子创建一个固定的访问路径。可以看出,在该优化方案中,访问路径是预先确定的,因此具有稳定、可预测的优点。然而,在表格中数据的分布偏离优化器所假设的平均分布的情况下,该方案估计的过滤因子就不够准确,由此会得出一个效率很低的访问计划。在另一种优化方案中,优化器假定查询语句执行时产生的第一个字面值更加具有代表性,由此估计出的过滤因子比平均分布的假设更加接近实际情况。相应地,优化器基于由此估计的过滤因子创建访问路径,并将创建的访问路径进行缓存用于查询语句的后续执行。于是,每次执行该查询语句时,就按照缓存的访问路径来访问数据库。参照上述销售信息统计表T和查询语句SELECT*FR0M T WHERE C0LUMN_2 = varl的例子,如果第一次执行该查询语句时,varl被赋值为B,那么优化器就基于过滤因子5%创建访问路径。在这种优化方案下,可以理解,如果第一次产生的字面值B确实具有足够的代表性,或者说,在接下来的查询执行中,字面值B出现频率足够大,那么创建的访问路径对于该查询语句的后续执行都比较有效。然而,如果第一次产生的字面值恰好不是最常使用的值,例如,在后续执行时,varl的值都是A,那么优化器所创建的访问路径将会使得该查询语句的后续执行效率非常低下。因此,该优化方案的执行性能波动较大,不够稳定。在另一种优化方案中,优化器在查询语句的执行过程中动态进行优化。每次执行该查询语句,优化器就根据实际产生的字面值估计过滤因子,然后创建经济的访问路径。很明显,这种优化方案对于找出最优的访问路径比较有效。然而,由于每次都重新估计过滤因子并重新创建访问计划,执行该优化方案的成本甚至可能大于执行查询的成本,产生的运行时开销常常超出可以忍受的范围。并且,持续地产生或改变访问路径使得访问路径的监视和追踪非常困难。在又一种优化方案中,优化器在每次执行查询语句时重新评估过滤因子,并判断之前创建的访问路径是否适合于新获得的过滤因子。如果过滤因子与缓存的访问路径不兼容,则重新创建访问路径。尽管这种方案相比于每次重新优化的方案减小了一部分开销,但仍然具有其几乎所有的不足。由于优化器仍然需要在每次执行查询语句时重新评估过滤因子,并在必要时重新优化,成本依然很高。因此,希望提出更好的优化方案来提高数据库优化器的优化性能。

发明内容
鉴于以上提出的问题,提出本发明,旨在提高数据库中访问路径优化的优化效果和执行效率。根据本发明第一方面,提供一种优化数据库中访问路径的方法,包括:对查询语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子;基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率;获取针对每个群组的平均过滤因子而创建的备选访问路径;以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本总和最小的备选访问路径确定为优选访问路径。根据本发明第二方面,提供一种优化数据库中访问路径的装置,包括:实例信息获取单元,配置为对查询语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子;分组单元,配置为基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率;备选路径获取单元,配置为获取针对每个群组的平均过滤因子而创建的备选访问路径;优选路径确定单元,配置为以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本总和最小的备选访问路径确定为优选访问路径。通过本发明实施例的方法和装置,能够基于查询语句的执行历史获得字面值和过滤因子的使用情况,并基于过滤因子的使用情况确定出优选的访问路径。由此获得的访问路径能够在更大概率上适合于查询语句接下来的执行,从而提高路径优化的效果。


图1示出根据本发明一个实施例的优化访问路径的方法的流程图;图2不出用户信息表格Tl的统计信息的一个例子;图3示出执行实例的信息的一个例子;图4示出根据本发明一个实施例的分组步骤的子步骤;图5A示出由图3的执行实例得到的类的例子;图5B示出执行实例的群组的例子;图6A-6B示出多个群组在多个访问路径下的执行成本的例子;图7A示出执行实例的信息另一个例子;图7B示出执行实例的群组的另一个例子;图7C示出访问路径的执行成本的交叉核查的例子;图8示出根据本发明一个实施例的优化访问路径的装置的框图;以及图9示出了适于用来实现本发明实施方式的示例性计算系统的框图。
具体实施例方式下面对本发明的具体实施方式
进行详细描述。所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下:有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于——电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络一包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。以下结合附图描述本发明的具体实施例。但是应该理解,以下对具体实施例的描述仅仅是为了解释本发明的执行示例,而不对本发明的范围进行任何限定。在本发明的多个实施例中,考虑重复执行的查询语句的执行历史,根据历史统计信息获取查询语句中各个字面值的使用情况,通过综合考虑字面值对应的过滤因子和字面值的使用频率来估计出优选的访问路径。图1示出根据本发明一个实施例的优化访问路径的方法的流程图,更具体地,该方法用于对多次重复执行的查询语句在数据库中的访问路径进行优化。如图所示,该优化方法包括如下步骤。在步骤11,对查询语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子;在步骤12,基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和出现频率;在步骤13,获取针对每个群组的平均过滤因子而创建的备选访问路径;在步骤14,以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本的总和最小的备选访问路径作为优选访问路径。以下结合具体例子描述上述各个步骤的具体执行方式。在一个例子中,表格Tl是用户信息统计表,其中某一列COUNTRY记录了用户的国籍信息。在一个应用中需要多次重复执行查询语句SELECT *FR0M Tl WHERE COUNTRY =var。在最初的执行过程中,可以基于例如现有技术中的平均分布假设估计过滤因子并创建访问路径。为了对访问路径进行优化使其更加适合于该查询语句的后续执行,在步骤11,对该查询语句的执行情况进行监视和采样。具体地,在之前的执行过程中,该查询语句的每一次执行可以称为一个执行实例(instance)。可以采用多种方式监视查询语句的执行,进而获得各个执行实例的基本信息。例如,数据库内部通常会以trace的形式记录各个查询的信息,包括查询中的参数、字面值、访问路径等等。通过读取数据库trace中的记录,即可获取各个执行实例的基本信息。或者,在另一例子中,对执行包含该查询语句的应用程序的运行时进行监视,以获得每个执行实例下变量的赋值,即查询条件中的字面值。本领域技术人员也可以采用其他方式监视查询语句的执行。对查询语句的执行实例的监视和采样可以基于一个特定时间段,该时间段长度例如可以是一天,一个星期,一个月等等。在一个例子中,可以获取指定时间段内所有执行实例的基本信息;或者,在另一个例子中,可以用其他方式进行部分采样,例如对执行时间段内的执行实例进行随机采样。对于采样得到的多个执行实例,可以如上所述容易地获得每个执行实例下的字面值。进一步地,基于获得的字面值,结合查询语句针对的表格Tl的统计信息,可以估计出每个字面值对应的过滤因子。本领域技术人员可以理解,为了便于数据查询,数据库中存储有各个表格的统计信息。例如,Tl表格的统计信息包含有各个列中的可能值,这些值的分布情况等。图2示出表格Tl的统计信息的一个例子。这个例子中示出了 Tl中COUNTRY列的统计信息。具体地,在图2的统计信息中,第一列记录了 COUNTRY列中可能的字面值,第二列记录了各个字面值在Tl的COUNTRY列的出现情况。由图2的统计信息可见,Tl的COUNTRY列共有5种可能值,其中值“China”在Tl的1000行中占据了 886行,出现频率为88.6%。一般地,可以将统计信息中的出现频率作为过滤因子的估计值。由此,可以获得各个字面值对应的过滤因子。在另一些情况下,查询语句的过滤条件或者谓词可能非常复杂,因此不易通过参考数据库中的统计信息获取到过滤因子。在这样的情况下,可以针对该谓词执行count语句,获取执行结果,根据执行结果计算过滤因子。可以理解,本领域技术人员能够根据不同的情况采用不同的方式来进行过滤因子的估算。于是,对于采样获得的多个执行实例,可以获得每一执行实例的信息,包括该执行实例下的字面值,以及该字面值对应的过滤因子。在一个例子中,通过对查询语句SELECT*FR0M Tl WHERE COUNTRY = var的执行情况进行采样获得了 100条执行实例,并相应获得了每个执行实例的字面值。通过结合图2所示的统计信息,进一步获得了各个字面值对应的过滤因子。由此,可以获得图3所示的执行实例的信息。具体地,图3的表格包含了 100行,每一行对应一条执行实例。并且,该表格分别在第二列和第三列示出执行实例下采用的字面值和对应的过滤因子。基于图3的表格,可以了解该查询语句在过去一段时间内的执行情况。在一个例子中,在对执行实例进行采样的同时,还对单个字面值的出现次数进行计数和统计,以示出各个字面值的使用情况。例如,通过对图3的100条执行实例进行统计可以获知,在100次采样中,有89次字面值为“China”,有6次字面值为“Vietnam”,有4次字面值为“Thailand”,有I次字面值为“Cambodia”。字面值“China”的使用频率最高,为89%。这些信息补充记载在图3的附加信息栏中。在另一实施方式中,对字面值的使用情况的统计可以在后续步骤中进行。在这种情况下,图3不包含附加信息栏。字面值的使用频率是查询语句之前的执行历史的反映,也可用作对接下来的执行情况的预测。如果某个字面值的使用频率较高,那么可以合理地预测,该字面值在接下来的执行中出现的概率也比较大。因此,在进行路径优化时考虑各个字面值的使用频率可以使得优化的路径更好地适合于查询语句接下来的执行情况。然而,一般来说,一个查询语句通常具有很多个可能的字面值。如果针对每个字面值的过滤因子和使用情况进行路径优化可能会带来过大的计算开销。因此,在本发明的多个实施例中,对获得的执行实例进行分组,针对每组的过滤因子和该组的出现频率进行访问路径的优化,也就是执行图1的步骤12。具体地,在步骤12中,基于各个执行实例中字面值对应的过滤因子将获得的多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率。在一个实施例中,分两个子步骤来执行步骤12。图4示出根据本发明一个实施例的步骤12的子步骤。如图所示,首先在步骤121,基于字面值将获得的多个执行实例划分多个类,获取每个类的过滤因子和出现频率;接着在步骤122,基于每个类中的过滤因子将所述多个类合并为多个群组,基于每个类的过滤因子和出现频率获取每个群组的平均过滤因子和出现频率。下面结合图3的执行实例的信息来描述以上子步骤。在子步骤121,基于执行实例中的字面值对执行实例进行归类。具体地,可以将字面值相同的执行实例归为一个类,将该相同字面值对应的过滤因子作为该类的过滤因子,并获取该字面值的使用频率作为该类的出现频率。在图3所示的100个执行实例中,共出现了 4个不同的字面值,据此可以将100个执行实例归为4个类,如图5A所示。在图5A中,第一个类对应于字面值为“China”的多个执行实例。根据图3的信息,该字面值“China”对应的过滤因子为88.6%。可以用该过滤因子代表这个类的过滤因子。进一步地,由于将所有字面值为“China”的执行实例都归为第一个类,因此该类中的执行实例的数目就等于字面值为“China”的执行实例的数目。如果将一个类的出现频率定义为该类中执行实例的数目相对于所有执行实例的数目的比例,那么显然,类的出现频率等于该类中字面值的使用频率。
在一个例子中,在对执行实例进行采样从而生成图3所示的执行实例信息表的过程中,已经对字面值的使用频率进行了统计。在这种情况下,通过参照图3的附加信息栏就可以获得各个类的字面值使用频率,并将其作为该类的出现频率。在另一个例子中,执行实例信息表中并没有示出字面值的使用频率。此时,在对各个执行实例进行归类的过程中,对每个类中的执行实例的数目进行计数和统计,从而直接获得每个类的出现频率。在图5A所示的例子中,在表的第3列示出了每个类的出现频率,例如第一个类的出现频率为89%,对应于图3的附加信息栏中所示的字面值(“China”)的使用频率。接着,对于如图5A所示的类,执行子步骤122,基于每个类中的过滤因子将多个类合并为多个群组,获取每个群组的平均过滤因子和出现频率。在一个例子中,根据过滤因子之间的“距离”来划分群组。例如,将过滤因子之间距离在预定阈值,例如5%之内的类合并为一个群组。由此,图5A所示的类2-4就可以合并为一个群组,类I作为一个单独的群组。在其他实施方式中,可以根据其他标准进行聚类从而获得群组。例如,可以将过滤因子的值划分为多个区间,将过滤因子属于同一区间的类合并为一个群组。本领域技术人员还可以想到其他的聚类方式,这些都在本发明的构思范围之内。对于获得的群组,计算每个群组的平均过滤因子和出现频率。由于群组是通过将多个类进行合并而获得的,因此,群组的出现频率可以计算为该群组下各个类的出现频率的和。对于过滤因子,可以通过多种方式求得其平均值作为群组的平均过滤因子。在一个实施例中,平均过滤因子可以计算为群组中各个类的过滤因子的算术平均。在另一个实施例中,可以以群组中各个类的相对出现频率为权重,计算各个类的过滤因子的加权平均。也就是说,可以定义权重因子为群组中各个类的出现频率相对于该群组的总出现频率的比例,利用该权重因子计算过滤因子的加权平均作为该群组的平均过滤因子。图5B示出执行实例的群组的例子。如图所示,根据过滤因子的大小,将图5A中的类I单独作为群组1,将类2-4合并为群组2。对于群组1,其出现频率即为类I的出现频率89% ;对于群组2,其出现频率为图5A中类2-4的出现频率的和,即11%。在图5B的例子中,采用加权平均的方式计算群组的平均过滤因子。因此,群组2的过滤因子计算为5.6%* 6% /11% +4.5% * 4% /11% +1.3*1% /11%= 4.8%。由此获得每个群组的出现频率和平均过滤因子。通过图5A到图5B的示例,可以看到将执行实例划分为群组的一种实施方式。容易理解,执行实例的数目Ni,类的数目Ne和群组的数目Ng满足如下关系:I < = Ng < = Ne<=Ni。一般地,Ni的数目远远大于Ng和Ne的数目。但是,取决于聚类的规则,类的数目Ne和群组的数目Ng有可能相等。尽管以上详细描述了首先将执行实例划分为类,再将类合并为群组的实施方式,但是可以理解,本领域技术人员还可以采用其他方式获取执行实例的群组。在一个实施例中,可以直接基于例如图3所示的执行实例的信息表将执行实例划分为群组。例如,可以在逐一扫描每一执行实例时,基于字面值对应的过滤因子直接判断该执行实例应该划分到哪个群组;并且,在将该执行实例放入对应群组的过程中,对执行实例的数目进行计数,并对过滤因子进行累加。如此,在扫描完所有执行实例之后,就可以直接获得执行实例的群组。并且,由于已经对每个群组中执行实例的数目进行计数,并对过滤因子进行了累加,同样可以容易地获得每个群组的出现频率和加权计算的平均过滤因子。由此,可以从图3所示的执行实例的信息直接获得图5B所示的群组信息,而不必先获得图5A所示的类的信息。除此之外,本领域技术人员在阅读本说明书的基础上还可以对形成群组的方式进行多种改动,例如改变划分群组的规则,改变出现频率/平均过滤因子的计算方式等等,从而获得更多的或不同的实施方式。这些实施方式都应包含在本发明的构思范围之内。在获得形成的多个群组的基础上,利用优化器引擎,可以获得针对每个群组创建的访问路径,即,执行图1的步骤13。具体地,优化器引擎可以根据过滤因子为查询语句创建一条经济的访问路径,并可以计算出该访问路径的执行成本。为了确定步骤12中获得的各个群组所适合的访问路径,可以在步骤13,将各个群组的平均过滤因子发送给优化器引擎。于是,优化器引擎会基于接收到的过滤因子确定出优选的访问路径。由此,可以获得基于每个群组的平均过滤因子产生的访问路径,在此将这样的访问路径称为备选访问路径。在一个例子中,对于图5B所示的群组,可以分别从优化器引擎获得针对群组I和2产生的备选访问路径A和B。接下来,判断所获得的多个备选访问路径,例如A和B,中哪一条访问路径对于整个群组的集合更加经济。这就需要对每个备选访问路径和每个群组进行交叉核查,基于交叉核查的结果确定优选的访问路径,如步骤14所示。具体地,在步骤14中,以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本的总和最小的备选访问路径确定为优选访问路径。为了执行步骤14,首先,从优化器引擎获得每个群组在每个备选访问路径下的执行成本。如前所述,对于给定的过滤因子f和访问路径P,优化器引擎可以计算出,在过滤因子为f的情况下,按照访问路径P执行查询语句产生的执行成本。那么,基于步骤12中获得的各个群组的平均过滤因子以及步骤13中获得的各个群组的备选访问路径,优化器引擎能够提供每个备选访问路径在每个群组的平均过滤因子的情况下的执行成本。例如,对于图5B所示的群组1-2以及步骤13中针对各个群组确定出的备选访问路径A和B,可以获得图6A所示的执行成本。如图6A所示,访问路径A在群组I的情况下的执行成本为485,在群组2的情况下的执行成本为900 ;访问路径B在群组I的情况下的执行成本为1000,在群组2的情况下的执行成本为750。这与步骤13中获得的结果,访问路径A更适合于群组I,访问路径B更适合于群组2,相一致。在一种执行方式下,在步骤13从优化器引擎获得每个群组的备选访问路径的同时,首先获得该备选访问路径针对对应的群组的执行成本。例如,在获得访问路径A和B的同时,首先获得路径A针对群组I的执行成本和路径B针对群组2的执行成本。然后,通过请求从优化器引擎获得每个备选访问路径针对其他群组的执行成本,例如路径A针对群组2的成本和路径B针对群组I的成本。由此,最终获得每个群组在每个备选访问路径下的执行成本。接着,进一步考虑各个群组的出现频率,以出现频率为权重因子对执行成本进行加权,由此获得每个群组在每个备选访问路径下的加权执行成本,如图6B所示。通过将执行成本乘以各个群组的出现频率,可以得到如下结果:访问路径A在群组I的情况下的加权执行成本为430,在群组2的情况下的加权执行成本为102 ;访问路径B在群组I的情况下的加权执行成本为886,在群组2的情况下的执行成本为85。
然后,基于各个加权执行成本,计算每一备选访问路径在所有群组下的加权执行成本的总和,将加权执行成本总和最小的备选访问路径确定为最优的访问路径。例如,在图6B的例子中,可以计算得到,如果群组I和2均按照访问路径A执行,那么加权执行成本的总和为430+101 = 532 ;如果群组I和2均按照访问路径B执行,那么加权执行成本的总和为886+85 = 971。很明显,访问路径A在所有群组下的加权执行成本的总和最小,因此可以将该访问路径确定为对所有群组的整体来说更加优选的访问路径。由此,通过交叉核查,确定出对于整个群组的集合来说最优的访问路径。综合以上,在步骤11-14中,通过监视查询语句的执行历史获取多个执行实例,然后将这些执行实例划分为多个群组,基于每个群组的出现频率和过滤因子确定出适合于该查询语句的访问路径。由于访问路径的优化是基于查询语句在过去一段时间内的执行历史统计,因此,优化过程可以在接下来的查询语句执行之前静态地进行,而不需要在运行时重新评估过滤因子、重新优化路径。这样,优化过程不会增加运行时的开销,不会占用运行时的资源。并且,由于访问路径是运行时之前预先确定的,因此这样获得的访问路径比较稳定,可以追溯。在这方面,可以随着查询语句的持续执行,间隔预定周期更新执行历史,也就是,添加新的执行实例或用新的执行实例替换之前的执行实例,从而使得获得的执行实例更准确地反映出过去一段时间内查询语句的执行情况。此外,在以上优化方案中,将执行实例划分为群组进行处理。这使得对执行实例的分析更加简单而具有针对性,进而使得优化方案的执行更加高效。进一步地,根据以上优化方案,在确定优选访问路径时,综合考虑了所有群组的过滤因子和出现频率。通过将出现频率作为权重因子,访问路径的优化更加倾向于出现频率高的群组。另一方面,群组的出现频率高意味着该群组对应的字面值的使用频率高,这暗示着,这些字面值在接下来的查询执行中出现的概率也会相应地比较高。因此,由于考虑了出现频率,获得的访问路径具有更大的可能性能够适合于接下来的查询执行。以上通过步骤11-14获取了适合于整个群组集合的单条访问路径。在进一步的实施方式中,还可以进一步判断采用多条访问路径的组合的可能性。具体地,在以上的步骤14中,已经获得了每个群组在每个备选访问路径下的加权执行成本。于是,可以将各个群组在其对应的备选访问路径下的加权执行成本求和,以此获得多条访问路径的加权执行成本。然而,如果采用多条访问路径的话,在进行路径切换时会产生额外的成本。因此,多条路径方案的总成本可以认为是多条访问路径的加权执行成本加上路径切换的成本。如果多条路径方案的总成本低于上述单条访问路径的总执行成本,那么就认为多条路径方案更加优选,否则,仍然采用单条访问路径的方案。例如,参照图6B,访问路径A在群组I的情况下的加权执行成本为430,访问路径B在群组2的情况下的执行成本为85。因此,如果对群组I采用访问路径A,对群组B采用访问路径B,也就是采用多条访问路径的组合,那么该多条访问路径的加权执行成本为515。假定每次切换路径的附加成本为50,那么该多条路径方案的总成本为565。这个成本要高于对所有群组均采用访问路径A时的总执行成本532,因此,在这个例子里,采用单条路径的方案仍然是更优选的。但是,如果在其他例子里,多条路径方案的总成本更低,那么采用多条路径的组合是更加优选的。在这种情况下,需要在运行时判断查询语句的过滤因子,以确定将其划分到哪个群组中。在以上的例子中,都是结合用户信息统计表Tl中的COUNTRY列和查询语句SELECT*FROM Tl WHERE COUNTRY = var进行描述的。在该查询语句中,仅包含了一个过滤条件“COUNTRY = var”。相应地,该查询语句的每个执行实例信息仅包含一个字面值和一个对应的过滤因子。然而,在一些情况下,一个查询语句可能包含了多个过滤条件。对于多个过滤条件的查询语句,仍然可以类似地执行图1的方法步骤,只是将执行实例中的字面值认为是字面值组合,将过滤因子认为是对应的过滤因子组合。在一个例子中,利用查询语句SELECT*FR0M T2WHERE SEX = AND JOB = 针对员工信息统计表T2中的SEX列和JOB列进行查询。该查询语句包含两个过滤条件:SEX = 以及JOB= 。在步骤11,通过监视该查询语句的执行历史,可以获得图7A所示的执行实例信息。具体地,在图7A的信息表中,每一执行实例信息都包含该执行实例下查询语句中的字面值集合,例如〈‘M’,’ DESIGNER’ >,< ‘F’,‘SALESREP’ >,以及字面值集合对应的过滤因子集合,例如〈0.8,0.4>,〈0.2,0.3>等。由于查询语句包含了两个过滤条件,因此每个字面值集合和过滤因子集合都包含2个元素。接着,在步骤12,基于过滤因子集合将图7A的执行实例划分为群组。如前所述,划分群组的方式有很多。对 于包含2个元素的过滤因子集合来说,可以定义一个二维距离,计算过滤因子集合的二维距离,基于该距离进行群组的划分。在形成群组的基础上,可以类似地获得每个群组的出现频率和平均过滤因子集合。平均过滤因子集合也可以采用算术平均或加权平均等多种方式来获得。假定在一个例子中,根据某种分组方式将图7A的执行实例形成为图7B所示的群组1-3,并获得了每个群组的出现频率和平均过滤因子集合。接下来,基于每个群组的平均过滤因子集合获得备选访问路径,即步骤13。在此假定,图7B所示的群组1-3分别获得了备选访问路径A,B, C。然后,在步骤14,对每个群组和每个备选访问路径进行交叉核查,确定出适合所有群组的访问路径。在图7B的例子中,存在三个群组1-3和三个备选访问路径A,B,C,因此,在图7C中以矩阵形式更清楚地示出交叉核查的结果。通过计算各个群组在每个备选访问路径下的加权执行成本,可以获知,路径B的总执行成本最小,可以确定为优选访问路径。这一步骤的执行与单个过滤条件的查询语句的例子完全相同。通过以上包含两个过滤条件的查询语句的例子,本领域技术人员可以容易地将过滤条件的数目类似地扩展到三个、四个甚至更多,使得本发明实施例的优化方案适合于各种查询语句的情形。以上结合具体例子描述了优化访问路径的方法。基于同一发明构思,本发明的实施例还提供了优化访问路径的装置。图8示出根据本发明一个实施例的优化访问路径的装置的框图,更具体地,该装置用于对多次重复执行的查询语句在数据库中的访问路径进行优化。如图所示,该优化装置80包括实例信息获取单元81,配置为通过对查询语句的执行情况进行监视和采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子;分组单元82,配置为基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和出现频率;备选路径获取单元83,配置为获取针对每个群组的平均过滤因子而创建的备选访问路径;以及优选路径确定单元84,配置为,以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本的总和最小的备选访问路径确定为优选访问路径。
在一个实施例中,上述分组单元82包含进一步的子单元或模块来实现执行实例的分组(未示出)。具体地,在一个例子中,分组单元82可以包含分类模块,配置为基于字面值将获得的多个执行实例划分多个类,获取每个类的过滤因子和出现频率;以及合并模块,配置为基于每个类中的过滤因子将所述多个类合并为多个群组,基于每个类的过滤因子和出现频率获取每个群组的平均过滤因子和出现频率。在一个实施例中,图8的优化装置80还包括多路径判断单元(未示出),配置为获取多条备选访问路径的组合的总执行成本,将该总执行成本与优选路径确定单元84确定的单条优选访问路径的总执行成本进行比较,以确定最优的访问路径。对于以上各个单元或模块的具体执行方式,可以参照之前结合方法流程和具体例子进行的详细描述,在此不再赘述。可以理解,上述路径优化的装置80可以嵌入或附加到现有的数据库系统的优化器中作为功能的扩展。此时,备选路径获取单元83和优选路径确定单元84可以在优化器内部直接从优化引擎获取备选访问路径及相应的成本。在另一种实施方式中,装置80可以作为一个独立的工具设置在现有优化器的外围,例如设置在客户端上。此时,装置80可以通过各种有线或无线的方式,利用各种通信协议,与优化器通信,由此将例如过滤因子的数据发送给优化器,并从优化器获得需要的数据,例如备选访问路径及相应的成本等。在另一种实施方式中,装置80的各个单元可以以分布式的形式实现。以上所述的优化数据库中的访问路径的方法和装置可以利用计算系统来实现。图9示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括:CPU(中央处理单元)101、RAM(随机存取存储器)102、R0M(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU IOU RAM 102、ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图10所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。虽然以上结合具体实施例,对本发明的方法、系统以及各个单元进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
权利要求
1.一种优化数据库中访问路径的方法,包括: 对查询语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子; 基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率; 获取针对每个群组的平均过滤因子而创建的备选访问路径; 以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本总和最小的备选访问路径确定为优选访问路径。
2.根据权利要求1的方法,其中所述获取多个执行实例的信息包括,获取每一执行实例下查询语句中的字面值,并通过以下方式中的至少一个获取所述字面值对应的过滤因子: 参照查询语句针对的表格的统计信息,根据所述统计信息获取过滤因子;以及 针对查询语句执行count语句,根据count语句的执行结果计算过滤因子。
3.根据权利要求1的方法,其中所述基于字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率包括: 基于字面值将获得的多个执行实例划分多个类,获取每个类的过滤因子和出现频率;以及 基于每个类中的过滤因子将所述多个类合并为多个群组,基于每个类的过滤因子和出现频率获取每个群组的平均过滤因子和出现频率。
4.根据权利要求3的方法,其中所述基于字面值将获得的多个执行实例划分多个类,获取每个类的过滤因子和出现频率包括: 将字面值相同的执行实例归为一个类,将该相同字面值对应的过滤因子作为该类的过滤因子,并获取该字面值的使用频率作为该类的出现频率。
5.根据权利要求3的方法,其中基于每个类中的过滤因子将所述多个类合并为多个群组包括以下之一: 将过滤因子之间的距离在预定阈值之内的类合并为一个群组;以及 将过滤因子的值划分为多个区间,将过滤因子属于同一区间的类合并为一个群组。
6.根据权利要求3的方法,其中所述基于每个类的过滤因子和出现频率获取每个群组的平均过滤因子和出现频率包括: 计算各个类的出现频率的和作为群组的出现频率; 通过以下方式之一计算群组的平均过滤因子: 计算各个类的过滤因子的算术平均作为群组的平均过滤因子; 以群组中各个类的相对出现频率为权重,计算各个类的过滤因子的加权平均作为群组的平均过滤因子。
7.根据权利要求1的方法,其中所述基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率包括: 在扫描所述每一执行实例时,基于字面值对应的过滤因子直接判断该执行实例的分组; 在将所述执行实例放入对应群组时,对每个群组中执行实例的数目进行计数,并对过滤因子进行累加; 基于每个群组中执行实例的计数获取该群组的出现频率,基于过滤因子的累加获取该群组的平均过滤因子。
8.根据权利要求1的方法,其中所述计算每个群组在每个备选访问路径下的加权执行成本包括: 获取每个群组在每个备选访问路径下的执行成本;以及 以对应群组的出现频率为权重因子乘以所述执行成本,由此获得每个群组在每个备选访问路径下的加权执行成本。
9.根据权利要求1的方法,还包括:获取多条备选访问路径的组合的总执行成本,将该总执行成本与所述优选访问路径的总执行成本进行比较,以确定最优的访问路径。
10.根据权利要求1的方法,其中所述查询语句包含多个过滤条件,所述字面值包含字面值集合,所述过滤因子包含过滤因子集合。
11.一种优化数据库中访问路径的装置,包括: 实例信息获取单元,配置为对查询 语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括该执行实例下查询语句中的字面值以及该字面值对应的过滤因子; 分组单元,配置为基于所述字面值对应的过滤因子将所述多个执行实例分为多个群组,获取每个群组的平均过滤因子和该群组的出现频率; 备选路径获取单元,配置为获取针对每个群组的平均过滤因子而创建的备选访问路径; 优选路径确定单元,配置为以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本总和最小的备选访问路径确定为优选访问路径。
12.根据权利要求11的装置,其中所述实例信息获取单元配置为,获取每一执行实例下查询语句中的字面值,并通过以下方式中的至少一个获取所述字面值对应的过滤因子: 参照查询语句针对的表格的统计信息,根据所述统计信息获取过滤因子;以及 针对查询语句执行count语句,根据count语句的执行结果计算过滤因子。
13.根据权利要求11的装置,其中所述分组单元包括: 分类模块,配置为基于字面值将获得的多个执行实例划分多个类,获取每个类的过滤因子和出现频率;以及 合并模块,配置为基于每个类中的过滤因子将所述多个类合并为多个群组,基于每个类的过滤因子和出现频率获取每个群组的平均过滤因子和出现频率。
14.根据权利要求13的装置,其中所述分类模块配置为: 将字面值相同的执行实例归为一个类,将该相同字面值对应的过滤因子作为该类的过滤因子,并获取该字面值的使用频率作为该类的出现频率。
15.根据权利要求13的装置,其中所述合并模块配置为执行以下之一: 将过滤因子之间的距离在预定阈值之内的类合并为一个群组;以及 将过滤因子的值划分为多个区间,将过滤因子属于同一区间的类合并为一个群组。
16.根据权利要求13的装置,其中所述合并模块配置为:计算各个类的出现频率的和作为群组的出现频率; 通过以下方式之一计算群组的平均过滤因子: 计算各个类的过滤因子的算术平均作为群组的平均过滤因子; 以群组中各个类的相对出现频率为权重,计算各个类的过滤因子的加权平均作为群组的平均过滤因子。
17.根据权利要求1 1的装置,其中所述分组单元配置为: 在扫描所述每一执行实例时,基于字面值对应的过滤因子直接判断该执行实例的分组; 在将所述执行实例放入对应群组时,对每个群组中执行实例的数目进行计数,并对过滤因子进行累加; 基于每个群组中执行实例的计数获取该群组的出现频率,基于过滤因子的累加获取该群组的平均过滤因子。
18.根据权利要求11的装置,其中所述优选路径确定单元配置为: 获取每个群组在每个备选访问路径下的执行成本;以及 以对应群组的出现频率为权重因子乘以所述执行成本,由此获得每个群组在每个备选访问路径下的加权执行成本。
19.根据权利要求11的装置,还包括:多路径判断单元,配置为获取多条备选访问路径的组合的总执行成本,将该总执行成本与所述优选访问路径的总执行成本进行比较,以确定最优的访问路径。
20.根据权利要求11的装置,其中所述查询语句包含多个过滤条件,所述字面值包含字面值集合,所述过滤因子包含过滤因子集合。
全文摘要
提供了一种优化访问路径的方法和装置,所述方法包括对查询语句的执行情况进行采样,获取多个执行实例的信息,每一执行实例的信息包括查询语句中的字面值以及字面值对应的过滤因子;基于过滤因子将多个执行实例分为多个群组,获取每个群组的平均过滤因子和群组的出现频率;获取针对每个群组的平均过滤因子而创建的备选访问路径;以出现频率为权重,计算每个群组在每个备选访问路径下的加权执行成本,将各个群组的加权执行成本总和最小的备选访问路径确定为优选访问路径。优化装置与上述方法对应。通过以上方法和装置,能够基于查询语句的执行历史确定出优选的访问路径,使其适合于接下来的执行情况,从而提高路径优化的效果。
文档编号G06F17/30GK103176974SQ20111043026
公开日2013年6月26日 申请日期2011年12月20日 优先权日2011年12月20日
发明者P·D·博斯曼, 周婧, 傅毓勤, 周祥, 魏可伟 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1