首页> 中国专利> 基于谓词关键度分析的查询计划缓存方法及其系统

基于谓词关键度分析的查询计划缓存方法及其系统

摘要

本发明提供了一种基于谓词关键度分析的查询计划缓存方法及其系统。在本发明中,通过把一个查询中出现的关键条件分割为一个个的谓词,由谓词分析器根据查询统计信息确定每个谓词对查询计划的影响,分析其权重,最终决定这些谓词是否会影响查询计划,如果不影响的话,那么即使用户输入的查询语句和现有的位于查询缓存区的语句在谓词数目上不一致,也认为可以匹配已有的缓存计划,从而提升缓存命中率。

著录项

  • 公开/公告号CN1825305A

    专利类型发明专利

  • 公开/公告日2006-08-30

    原文格式PDF

  • 申请/专利权人 北京神舟航天软件技术有限公司;

    申请/专利号CN200510116857.0

  • 发明设计人 顾云苏;

    申请日2005-10-31

  • 分类号G06F17/30(20060101);

  • 代理机构11100 北京北新智诚知识产权代理有限公司;

  • 代理人陈曦

  • 地址 100036 北京市海淀区阜成路73号裕惠大厦17层

  • 入库时间 2023-12-17 17:38:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-05-10

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F17/30 专利号:ZL2005101168570 变更事项:专利权人 变更前:北京神舟航天软件技术有限公司 变更后:北京神舟航天软件技术股份有限公司 变更事项:地址 变更前:100036 北京市海淀区阜成路73号裕惠大厦17层 变更后:100036 北京市海淀区阜成路73号裕惠大厦17层

    专利权人的姓名或者名称、地址的变更

  • 2008-06-25

    授权

    授权

  • 2006-10-25

    实质审查的生效

    实质审查的生效

  • 2006-08-30

    公开

    公开

说明书

技术领域

本发明涉及一种查询计划缓存的方法及其系统,尤其涉及一种基于谓词关键度分析的查询计划缓存方法及其系统,属于数据库技术领域。

背景技术

数据库系统的一个主要功能是快速执行用户对数据的查询和更新等操作,然而从用户输入的SQL语句必须经过转化才能成为能够直接对物理存储上的访问。因此,查询优化器被引入以完成这个过程。然而,对于一个复杂的查询,往往有很多种不同的查询执行方式,这会导致查询优化器耗费过多时间用于SQL语句优化,在极端的情况下,甚至有可能超过查询本身执行的时间。因此,查询缓存做为一个技术被广泛应用于各个数据库中,用以降低查询优化的时间,其基本思想是把以前使用过的查询缓存在内存中,仅把其中的常量(如下式i)中的2替换成可变参数),在新的查询输入时,如果能和原先的查询匹配(仅可变参数不同),那么就不需要为其重新生成查询计划,而重新使用原先的查询计划。能够使用原有的查询计划的查询被称为命中,命中率越高,意味着查询计划缓存系统的效率越高。

然而,现有的查询缓存技术存在很多不足之处缺陷,其中有两个主要的问题。

问题a)只能支持完全可以进行参数匹配的那些语句,比如以下三个简单的SQL语句式子:

select*from T where T.c1=2                         i)

select*from T where T.c1=3                         ii)

select*from T where T.c1=3 and T.c2=3             iii)

其中,i)和ii)之间可以可以进行匹配,但是针对结构并不相同的语句,例如i)和iii)却不能匹配,尽管之前在缓存池中已经存在了i)的计划,但是因为i)和iii)之间的谓词数目并不同,所以保存的i)的查询计划并不能为iii)所用,必须重新生成。

在传统的OLTP(联机事务处理)应用中,查询语句之间的区别往往是常量参数的不同,即语句的区别类似与i)和ii),使用传统的计划缓存方式,可以达到很高的命中率;但对于新兴的OLAP(联机数据分析)应用,查询语句的区别往往是类似i)式和iii)式的区别,在这类应用中,计划缓存系统的命中率将迅速下降,甚至接近于0。

问题b)在一些情况下,即使两个查询完全匹配,也不能保证缓存中的查询计划可以应用中后一个查询。以i)为例,假设在T的c1上存在一个索引T_C1,且表T中满足条件C1=2的行不多,那么生成的计划将为一个索引扫描操作:

Index Scan using T_C1 on T Index Cond:(C1=2)

当表T中的行大量满足C1=3时,为ii)生成的计划应该是一个普通的如下的表扫描。

Seq Scan on T Filter:(C1=3)

但计划缓存往往会产生错误的匹配,导致生成不优的查询计划。

由a)和b)两个问题可以看到,即使是看似相似的条件,也不能保证一定能匹配原先的计划,而看似不同的条件,也不能不匹配原先的计划。因此,现有的基于常量参数的算法不能保证最好的查询缓存匹配效果,导致查询计划缓存的效率不高,甚至出现错误的匹配影响查询执行的效率。

发明内容

本发明的目的在于针对现有技术的不足,提供一种新的基于谓词关键度分析的查询计划缓存方法及其系统。该方法及其系统可以显著提升查询计划缓存的命中率。

为实现上述的发明目的,本发明采用下述的技术方案:

一种基于谓词关键度分析的查询计划缓存方法,其特征在于包括如下步骤:

(1)分析查询中使用到表;

(2)取出表的查询计划缓存;

(3)取出可匹配的查询计划缓存;

(4)分析查询谓词的差别;

(5)是否有相差谓词?

(6)如果是,则进一步判断是否有影响索引的谓词以及关键度是否大于K;如果否,则分析现有谓词,判断关键度是否大于K;

(7)比较这些谓词的选择度差异;

(8)在差异不影响查询计划的前提下,返回结果。

在查询之前,首先把查询进行语法分析,生成语法树,并将其使用到的谓词和表解析出来。

所述谓词被分为KEY和FILTER,所述步骤(6)中的谓词为KEY。

一种基于谓词关键度分析的查询计划缓存系统,其特征在于包括:

语法分析器:处理输入的SQL查询语句,完成语法检查,生成可供内部处理的标准的语法树结构,以表示用户输入的查询;

查询缓存器:负责缓存全部的查询计划,并将其存储在系统的内存中,按涉及的到表、索引等物理结构的多少进行管理和组织;

查询优化器:根据一个输入的查询语句,为其生成最优的计划,并将该计划输出给执行器执行,同时输出到查询缓存器中进行存储;

谓词分析器:负责根据查询统计信息,分析查询计划和查询语句中的谓词的权重,确定计划是否依赖于固定谓词;

查询执行器:执行查询计划,并在执行过程中进行统计信息的反馈更新;

统计信息处理器:负责统计信息的维护、更新、使用;

其中语法分析器与谓词分析器之间传递用户输入的SQL语句转换后的语法分析树;查询优化器与查询缓存器之间传递生成的查询计划;查询优化器与谓词分析器之间传递生成的查询计划;查询优化器与查询执行器之间传递生成的查询计划;查询执行器与统计信息处理器之间传递查询执行时的实时统计信息;统计信息处理器与谓词分析器之间传递统计信息;谓词分析器与查询优化器之间传递通过匹配完成的查询计划;查询缓存器与谓词分析器之间传递匹配的查询计划。

谓词分析器中按以下序列确定其对查询计划的影响度:

(1)是否是优化器确定使用的唯一索引的主键值;

(2)是否是优化器确定使用的普通索引的键值;

(3)是否是优化器确定使用的唯一多值索引的一部分;

(4)是否是优化器确定使用的普通多值索引的一部分。

本发明所提供的基于谓词关键度分析的查询计划缓存方法及其系统

具有以下优点:

1.提升了查询计划缓存的命中率,克服了以往的技术不能支持查询语句中谓词数目不同情况下造成的无法匹配实际可用的查询计划缓存的现象,特别是适合新型的OLAP应用,从而提高了查询处理的速度,提升了查询性能。

2.通过谓词分析的过程,去除了那些对于查询影响关键度没有影响或者影响小于一个阈值的谓词,减少了不必要的查询计划缓存匹配谓词,加快了匹配速度。

3.通过查询计划缓存的基于查询所涉及到的表分类管理,提高了查询计划缓存本身访问的速度。

附图说明

下面结合附图和具体实施方式对本发明作进一步的说明。

图1为本发明所述的基于谓词关键度分析的查询计划缓存系统的示意图。

图2为查询计划的示意图。

图3为本发明所述的基于谓词关键度分析的查询计划缓存方法的流程图。

图4为作为具体实施例的某育龄妇女信息数据库的界面示意图。

具体实施方式

本发明的核心技术思想在于通过把一个查询中出现的关键条件分割为一个个的谓词,由谓词分析器根据查询统计信息确定每个谓词对查询计划的影响,分析其权重,最终决定这些谓词是否会影响查询计划,如果不影响的话,那么即使用户输入的查询语句和现有的位于查询缓存区的语句在谓词数目上不一致,也认为可以匹配已有的缓存计划,从而提升缓存命中率。

为此实现上述的技术思想,本发明采用如图1所示的查询缓存处理系统。该查询缓存处理系统由以下几个关键子系统构成,它们都完成特定的功能:

1.语法分析器:处理输入的SQL查询语句,完成语法检查,生成可供内部处理的标准的语法树结构,以表示用户输入的查询。

2.查询缓存器:负责缓存全部的查询计划,并将其存储在系统的内存中,按涉及的到表、索引等物理结构的多少进行管理和组织。

3.查询优化器:根据一个输入的查询语句,为其生成最优的计划,并将该计划输出给执行器执行,同时输出到查询缓存器中进行存储。

4.谓词分析器:负责根据查询统计信息,分析查询计划和查询语句中的谓词的权重,确定计划是否依赖于固定谓词。

5.查询执行器:执行查询计划,并在执行过程中进行统计信息的反馈更新。

6.统计信息处理器:负责统计信息的维护、更新、使用。

各个子系统之间传递的信息流如表1所示:

  子系统名  子系统名  传递的请求和信息  语法分析器  谓词分析器  用户输入的SQL语句  转换后的语法分析树  查询优化器  查询缓存器  生成的查询计划  查询优化器  谓词分析器  生成的查询计划  查询优化器  查询执行器  生成的查询计划  查询执行器  统计信息处理器  查询执行时的实时统计信息  统计信息处理器  谓词分析器  统计信息  谓词分析器  查询优化器  通过匹配完成的查询计划  查询缓存器  谓词分析器  匹配的查询计划

                        表1

在这个过程中,最关键的部分在于查询中谓词的权重估计。权重估计分为两部分进行,第一步是在优化器生成查询计划时的进行,第二是在匹配查询计划时进行。

查询缓存的关键在于为新的查询在已有的查询计划缓存中找到一个最为合适的,传统的办法是简单的匹配字符串,而在我们的发明中,则使用谓词匹配的方式。首先把查询进行语法分析,生成语法树,并将其使用到的谓词和表解析出来。

在优化器生成查询计划时,优化器会使用其中一些谓词,谓词被分为KEY和FILTER,所谓的KEY是指能用于索引的那些谓词,比如表T(I int,J int)有索引T_I建立在T(I)上,那么例如谓词(T.i>5)的表达式被称为KEY,而谓词T.K>5这样的谓词则被称为是FITER。KEY对查询计划的影响比较大,而FILTER则次之。对于KEY,由于索引类型的不同,KEY又存在不同的级别,在谓词分析器中按以下序列确定其对查询计划的影响度。

a)是否是优化器确定使用的唯一索引的主键值。

b)是否是优化器确定使用的普通索引的键值。

c)是否是优化器确定使用的唯一多值索引的一部分。

d)是否是优化器确定使用的普通多值索引的一部分。

对于FILTER,对查询计划的影响主要是体现在选择率(selectivity)的大小,即通过这个FILTER谓词后所剩下的元组和总输入元组的比较。选择率越小的Filter对查询计划的影响越大,反之,则影响越小。由于查询计划是一个如图2所示的树状图,在树的底层的查询由于结果要为上层所用,因此其KEY和FILTER对查询的影响更大,如图2中的Filter21和KEY31对于查询代价的影响就要大于Filter11。查询优化器在第一次计算出查询计划时,就根据选择率和FILTER所位于的位置,可以定义出他们对于查询计划代价的影响函数(这是标准的Cost-based查询优化器可以进行的操作,不详述),这称为谓词的关键度。然后把这些谓词及其关键度放置在查询缓存器中。

我们根据系统的具体情况,设置一个查询计划代价的阈值K,并按如下算法确定是否可以两者是否可匹配,即是否能命中:

1)检查查询语句中涉及的表和缓存中的查询计划中涉及的表是否一致,如不一致,那么不能匹配。

2)检查需要匹配的查询语句和缓存中的查询计划是否相差一个或者数个谓词,如不相差,那么跳到第6)步。如果相差,那么进入下一步。

3)如果这些谓词为KEY,那么确认他们是否影响到了索引的选择,如果影响到,那么这个两者是不能命中。如果不影响,那么等同FILTER处理,进入下一步。

4)对于不影响的KEY和所有的FILTER,计算他们对于查询计划的关键度,即对查询代价引起的偏差程度。

5)对于关键度<K的谓词,意味着这两者是可以匹配的,不进行处理。

如果所有的相差谓词关键度都<K,就意味着这个查询是可以匹配的,进入下一步。否则认为是不能匹配的。

6)对于所有可以命中的情况下,由于每个谓词的常量可以发生变化,需要检查其每个谓词对查询计划的影响,如果关键度>K的,那么需要计算谓词应用新的常量时的选择度与原来计划缓存的选择度的区别,如果选择度没有区别,就意味着该谓词是匹配的,如果选择度相差比较大的,就意味着基于这一谓词计算出来的查询计划必须重新计划,即不能匹配。

图3是说明本发明所提供的基于谓词关键度分析的查询计划缓存方法的基本流程图。关于该流程的各步骤,在上述的说明中都有详细的解释,在此不一一说明了。

下面以一个具体的数据库查询为例对本方法及其系统的效果予以进一步说明。该数据库是某育龄妇女信息数据库,数据库中存放了育龄妇女的有关信息,并提供了根据不同维度由用户进行定制查询的功能,即所有的SQL语句都是由用户根据需要可以增加不同的查询条件并进行随意组合来完成其查询的,如出生日期,父母信息条件,计划内生育指标,所在城市等等几十个条件,如图4所示。

在应用本发明之前,由于每个语句的谓词数目都不相等,生成的语句类似如下:

select                                                distinctbasetable.bt_code,basetable.bt_bname,basetable.bt_birth_date,husband.hb_husband_name,husband.hb_birth_date,nursing.nu_sex,nursing.nu birth_date,nursing.nu_report_date,nursing.nu_procreate,nursing.nu_attribute from(select*from basetable where basetable.bt_codelike'330605%')as basetable left join(select*from nursing)as nursing on(nursing.nu_code=basetable.bt_code)and(nursing.nu_code like'330605%')left join(select*from husband)as husband on(husband.hb_code=basetable.bt_code)and(husband.hb_code like '330605%')where((nursing.nu_report_date>='20050101'and nursing.nu_report_date<='20050531')and(nursing.nu_birth_date<'20050101')and(((nursing.nu_report_date>=basetable.bt_indate)and not(basetable.bt_indate=”))or(basetable.bt_indate=”)))and(nursing.nu_is_last='1'or nu_code is null)andbasetable.bt_code like'330605%'order by basetable.bt_code;其中在where之后出现的条件都是可选择的,如”(nursing.nu_report_date>='20050101'and nursing.nu_report_date<='20050531')”(上报日期在2005年1月1日和2005年5月31日间),”nursing.nu_birth_date<'20050101'”(出生日期小于2005年1月1日),因此几乎所有的查询语句都不能在查询缓冲中命中,除非每次都使用相同的谓词组合,其命中率在实际应用测试中不到10%。

采用本发明所述的方法及其系统之后,经实际应用测试,基本上这些查询能够用大约100个查询计划全部覆盖住,在运行一段时间后,所有的查询计划缓存命中率达到了90%以上。

以上对本发明的具体实施方式进行了详细的解说。对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号