一种基于cascades框架下的planhint的实现方法及系统
技术领域:
:1.本发明公开一种基于cascades框架下的planhint的实现方法及系统,涉及分布式数据库优化
技术领域:
:。
背景技术:
::2.自顶向下vs自底向上:自顶向下的优化器从一个规范化计划开始,自顶向下地进行优化,从而获得最优计划树;采用自顶向下的优化策略的优化器包括基于volcano和cascades框架的优化器。自底向上的优化器从零开始构建最优计划,这类方法通常采用动态规划策略进行优化,采用这类方法的优化器包括ibmsystemr和starburst。自底向上有一些局限性,如剪枝有限,不能覆盖所有的搜索空间(如上层有sort表达式,下层感知不到需要排序)。3.探索规则:cascades生成一个算子的等价算子实际上是通过规则完成的。简单来讲,规则分为两部分,匹配模式(matchingpattern)和替代模式(replacingpattern)。规则的匹配模式检查输入算子是否满足特定的条件,如果满足,则使用规则的替代模式生成等价算子。在znbase中,规则分为两类规范化规则(normalizationrule)和探索规则(explorationrule),前者应用在normalization过程,对应cascades框架中的transformationrule;而后者应用在cbo过程中,对应cascades框架中的implementationrule。4.planhint作用:hint是嵌入sql语句的对优化器进行提示的信息,是dba进行sql优化的常用手段。sql语句经过优化器(规则优化(rbo)、代价优化(cbo)),通常会选择正确的查询路径,但是智者千虑,必有一失,有时优化器也会选择一个很差的计划,使得该条sql查询变得很慢,此时需要dba人为干预(通过给sql语句增加一个注释),告诉优化器要选择指定的访问路径(fullscan、indexscan)或join类型(merge、hash、lookup),使得该条sql语句可以高效的运行。5.在数据库处理实际业务查询请求时,优化器会遇到大量的查询语句,甚至有些查询语句涉及多表(如四表或以上)的联合查询,优化器没有办法完全保证所有查询都会选择一个较好的计划。在实际业务场景下,已经无法通过改善优化器来提高语句的性能,故现发明一种基于cascades框架下的planhint的实现方法及系统,以解决上述问题。技术实现要素:6.本发明针对现有技术的问题,提供一种基于cascades框架下的planhint的实现方法及系统,所采用的技术方案为:一种基于cascades框架下的planhint的实现方法,所述的方法在cascades优化器框架下,嵌入式planhint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能。7.所述方法的具体步骤如下:8.s1修改sql查询语句;9.s2增加hintset结构;10.s3填充scan和join的hint限制信息。11.所述s1修改sql查询语句的具体步骤如下:12.s11输入含有planhint的sql查询语句;13.s12利用parser编译解析,生成抽象语法树;14.s13将ast中的hint信息保存在hintset中。15.所述s2增加hintset结构的具体步骤如下:16.s21在sql语句中指定要在表c上强制使用索引idx2;17.s22经过parser后,hint信息保存在hintset中;18.s23在builder阶段,hint信息将indexhint和tablehint分开保存;19.s24在规范化计划树和memo结构中,hint信息存在对应的expr结构体中。20.一种基于cascades框架下的planhint的实现系统,所述的系统在cascades优化器框架下,嵌入式planhint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能。21.所述系统具体包括语句修改模块、结构处理模块和信息填充模块:22.语句修改模块:修改sql查询语句;23.结构处理模块:增加hintset结构;24.信息填充模块:填充scan和join的hint限制信息。25.所述语句修改模块具体包括语句输入模块、语句解析模块和信息保存模块:26.语句输入模块:输入含有planhint的sql查询语句;27.语句解析模块:利用parser编译解析,生成抽象语法树;28.信息保存模块:将ast中的hint信息保存在hintset中。29.所述结构处理模块具体包括语句处理模块、信息存储模块a、信息存储模块b和信息存储模块c:30.语句处理模块:在sql语句中指定要在表c上强制使用索引idx2;31.信息存储模块a:经过parser后,hint信息保存在hintset中;32.信息存储模块b:在builder阶段,hint信息将indexhint和tablehint分开保存;33.信息存储模块c:在规范化计划树和memo结构中,hint信息存在对应的expr结构体中。34.本发明的有益效果为:本发明能够在不改变数据库优化器内核代码的情况下,使用发明的planhint对查询语句进行调优,提升查询语句的执行效率,作为dba的临时调优手段;本发明也能够作为数据库优化器开发人员的工具,根据嵌入不同的planhint,对比查询语句的效率,进而调优数据库的查询优化器。附图说明35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。36.图1是本发明方法实施例中planhint在数据库中的解析流程图;图2是本发明方法实施例中planhint在数据库不同阶段的表现形式的示意图;图3是本发明方法实施例中查询语句经过优化器的结构示意图;图4是本发明方法实施例中use_index指定某张表选择的索引的语法图;图5是本发明方法实施例中ignore_index指定某表不发选择哪些索引的语法图;图6是本发明方法实施例中hash_join指定这两张表以hashjoin的方式连接的语法图;图7是本发明方法实施例中lookup_join指定这两张表以lookupjoin的方式连接的语法图;图8是本发明方法实施例中merge_join指定这两张表以mergejoin的方式连接的语法图;图9是本发明方法实施例中disallow_hash,disallow_lookup,disallow_merge禁止两表做指定的join类型的语法图。具体实施方式37.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。38.首先对本发明方法实现如下所示几种planhint,语法图4~9所示。39.实施例一:40.一种基于cascades框架下的planhint的实现方法,所述的方法在cascades优化器框架下,嵌入式planhint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能;41.进一步的,所述方法的具体步骤如下:42.s1修改sql查询语句;43.s2增加hintset结构;44.s3填充scan和join的hint限制信息;45.hint的特性为:为了保证兼容性,hint通过嵌入特殊注释的形式完成对优化器的提示;例如用户可以通过如下方式提示优化器对表t1的访问方法选择索引idx1,对表t1,表t2连接时使用mergejoin类型;46./*+use_index(t1,idx1),merge_join(t1,t2)*/47.本发明方法主要添加两类hint,indexhint和tablehint;indexhint是扫描表时提示优化器如何使用索引,包括use_index(表,索引名),ignore_index(表,索引名)等;tablehint是表连接时提示优化器如何使用join算子,包括merge_join(表1,表2),hash_join(表1,表2);以下将从planhint在数据库中的解析流程、planhint在数据库不同阶段的表现形式、以及对优化器产生的影响三个方面介绍此类hint的实现;48.planhint在数据库中的解析流程如图1所示,49.进一步的,所述s1修改sql查询语句的具体步骤如下:50.s11输入含有planhint的sql查询语句;51.s12利用parser编译解析,生成抽象语法树;52.s13将ast中的hint信息保存在hintset中;53.按照s11输入含有planhint的sql查询语句,如下所示;54.select/*+use_index(t1,idx1),merge_join(t1,t2)*/55.count(*)56.fromt1,t257.wheret1.a=t2.b;58.按照s12parser编译解析,生成抽象语法树;59.按照s13将ast中的hint信息保存在hintset中;60.在rbo阶段,生成第一个规范化计划,rbo阶段的开始;在此阶段builder从ast树获取hint信息,将对应的hint解析到tablehint和indexhint中;61.planhint在数据库不同阶段的表现形式,以如图2中的查询语句为例:62.再进一步的,所述s2增加hintset结构的具体步骤如下:63.s21在sql语句中指定要在表c上强制使用索引idx2;64.s22经过parser后,hint信息保存在hintset中;65.s23在builder阶段,hint信息将indexhint和tablehint分开保存;66.s24在规范化计划树和memo结构中,hint信息存在对应的expr结构体中;67.根据s2中查询语句经过优化器大致会得到如图3所示结构;68.结构解释如下:69.bestht存储着每个group的代价最低的表达式;70.exprht存储所有探索出来的表达式;71.group为逻辑等价的关系表达式的集合;72.hint对cbo阶段的影响如下:73.排除了若干操作,减少了memo结构体中表达式的个数,如上图x号所示,group0中不能生成nlj类型的连接查询;74.决定相关group的最优计划选择,如上图group1,group1中的索引idx1位于exprht表中的#7,说明生成了相应查询路径,但是会在在代价计算过程中将它的代价赋值为hugecost,导致group1中不能通过索引idx1获取表的数据;75.由于使用forceindex,在探索阶段使用其它索引的表达式不会被优化器选择;76.最终影响最优计划树的选择。77.实施例二:78.一种基于cascades框架下的planhint的实现系统,所述的系统在cascades优化器框架下,嵌入式planhint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能;79.进一步的,所述系统具体包括语句修改模块、结构处理模块和信息填充模块:80.语句修改模块:修改sql查询语句;81.结构处理模块:增加hintset结构;82.信息填充模块:填充scan和join的hint限制信息;83.进一步的,所述语句修改模块具体包括语句输入模块、语句解析模块和信息保存模块:84.语句输入模块:输入含有planhint的sql查询语句;85.语句解析模块:利用parser编译解析,生成抽象语法树;86.信息保存模块:将ast中的hint信息保存在hintset中;87.再进一步的,所述结构处理模块具体包括语句处理模块、信息存储模块a、信息存储模块b和信息存储模块c:88.语句处理模块:在sql语句中指定要在表c上强制使用索引idx2;89.信息存储模块a:经过parser后,hint信息保存在hintset中;90.信息存储模块b:在builder阶段,hint信息将indexhint和tablehint分开保存;91.信息存储模块c:在规范化计划树和memo结构中,hint信息存在对应的expr结构体中。92.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
技术特征:1.一种基于cascades框架下的plan hint的实现方法,其特征是所述的方法在cascades优化器框架下,嵌入式plan hint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能。2.根据权利要求1所述的方法,其特征是所述方法的具体步骤如下:s1修改sql查询语句;s2增加hintset结构;s3填充scan和join的hint限制信息。3.根据权利要求2所述的方法,其特征是所述s1修改sql查询语句的具体步骤如下:s11输入含有plan hint的sql查询语句;s12利用parser编译解析,生成抽象语法树;s13将ast中的hint信息保存在hintset中。4.权利要求3所述的方法,其特征是所述s2增加hintset结构的具体步骤如下:s21在sql语句中指定要在表c上强制使用索引idx2;s22经过parser后,hint信息保存在hintset中;s23在builder阶段,hint信息将indexhint和tablehint分开保存;s24在规范化计划树和memo结构中,hint信息存在对应的expr结构体中。5.一种基于cascades框架下的plan hint的实现系统,其特征是所述的系统在cascades优化器框架下,嵌入式plan hint的详细实现方式,通过与sql语句绑定,优化sql语句查询性能。6.根据权利要求5述的系统,其特征是所述系统具体包括语句修改模块、结构处理模块和信息填充模块:语句修改模块:修改sql查询语句;结构处理模块:增加hintset结构;信息填充模块:填充scan和join的hint限制信息。7.根据权利要求6所述的系统,其特征是所述语句修改模块具体包括语句输入模块、语句解析模块和信息保存模块:语句输入模块:输入含有plan hint的sql查询语句;语句解析模块:利用parser编译解析,生成抽象语法树;信息保存模块:将ast中的hint信息保存在hintset中。8.权利要求7所述的系统,其特征是所述结构处理模块具体包括语句处理模块、信息存储模块a、信息存储模块b和信息存储模块c:语句处理模块:在sql语句中指定要在表c上强制使用索引idx2;信息存储模块a:经过parser后,hint信息保存在hintset中;信息存储模块b:在builder阶段,hint信息将indexhint和tablehint分开保存;信息存储模块c:在规范化计划树和memo结构中,hint信息存在对应的expr结构体中。
技术总结本发明公开了一种基于Cascades框架下的Plan Hint的实现方法及系统,属于分布式数据库优化领域;所述的方法在Cascades优化器框架下,嵌入式plan hint的详细实现方式,通过与。QL语句绑定,优化SQL语句查询性能;本发明在Cascades优化器框架下实现plan hint查询;本发明能够在不改变数据库优化器内核代码的情况下,使用发明的plan hint对查询语句进行调优,提升查询语句的执行效率,作为DBA的临时调优手段;本发明也能够作为数据库优化器开发人员的工具,根据嵌入不同的plan hint,对比查询语句的效率,进而调优数据库的查询优化器。进而调优数据库的查询优化器。进而调优数据库的查询优化器。
技术研发人员:蒋家超
受保护的技术使用者:山东浪潮科学研究院有限公司
技术研发日:2022.05.07
技术公布日:2022/7/5