System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库访问,尤其涉及一种在opengauss数据库中动态分区裁剪的方法和系统。
技术介绍
1、opengauss数据库中,为了检索数据,需要将请求数据的sql查询语句提交给数据库服务器,数据库服务器计算查询并返回所请求的数据。提交给数据库服务器的sql查询语句经过查询优化器进行优化后,生成一个执行计划,该计划定义执行查询的操作。
2、对于分区表的条件查询,当查询优化器执行优化时,会根据查询条件进行静态分区裁剪,将不符合条件的分区去除,保留符合条件的分区执行扫描并返回元组。分区裁剪可以减少执行时扫描的分区数量,对于分区数较多的分区表,能命中查询条件对应需要扫描的分区,增加查询效率。
3、目前opengauss分区裁剪只支持查询条件表达式为常量的场景,如:“where id=1”。不支持分区表查询中查询条件表达式为另一张表的字段、子查询或者参数的场景。在此类场景中,如果分区表分区数较多,未执行分区裁剪,需要扫描所有的分区后再进行条件过滤,查询效率不高。
4、如何提供一种动态分区裁剪的方法,使opengauss数据库的分区裁剪适用于查询条件表达式为另一张表的字段、子查询或者参数的场景,在查询执行时计算表达式的值,根据执行时计算的表达式值进行裁剪的操作,成为亟待解决的技术问题。
技术实现思路
1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种在opengauss数据库中动态分区裁剪的方法和系统。
2、根据本专利技术的第
3、生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件;
4、采用partiterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果;
5、采用partiterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描。
6、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件,包括:
7、通过查询优化器执行静态分区裁剪,生成执行计划,存储静态裁剪后需要扫描的分区的分区序号,将静态裁剪后需要扫描的分区的分区序号作为静态分区裁剪结果;
8、在生成执行计划时,获取无法进行静态分区裁剪且查询条件中的字段为分区键的查询条件,将所述查询条件存储至执行计划。
9、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,采用partiterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果,包括:
10、初始化partiterator算子执行数据,在初始化partiterator算子执行数据时,判断执行计划中是否存在动态分区裁剪的查询条件;
11、当执行计划中存在动态分区裁剪的查询条件,为动态分区裁剪的查询条件中的表达式分配数据库内核的计算接口函数,为动态分区裁剪申请分区裁剪内存上下文;
12、采用初始化的partiterator算子执行数据执行partiterator算子,在执行partiterator算子时,判断执行计划中是否存在动态分区裁剪的查询条件;
13、当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果。
14、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,包括:
15、从当前内存上下文切换到分区裁剪内存上下文,通过分配的数据库内核的计算接口函数计算动态分区裁剪的查询条件中的表达式的值;
16、根据动态分区裁剪的查询条件中的分区键确定分区表中的分区范围,将计算获得的动态分区裁剪的查询条件中的表达式的值与根据分区键确定的分区表中的分区范围进行匹配,获取符合动态分区裁剪条件的分区范围的分区序号;
17、对符合动态分区裁剪条件的分区范围的分区序号与静态裁剪后需要扫描的分区的分区序号进行求交集处理,将求交集处理结果作为动态分区裁剪结果。
18、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,还包括:在完成对分区表中的分区进行动态裁剪后,从分区裁剪内存上下文切换到原来的内存上下文,通过重置分区裁剪内存上下文清理动态分区裁剪时申请的内存。
19、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,采用partiterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描,包括:
20、采用partiterator算子根据动态分区裁剪结果,获取需要扫描的分区序号,当获取的分区序号大于0,将获取的分区序号分配至扫描算子;
21、扫描算子根据分配的分区序号对所述分区序号对应的分区进行扫描,将扫描获得的元组返回至partiterator算子。
22、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法中,采用partiterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描,包括:
23、如果扫描算子返回的元组不为空,partiterator算子将元组返回给客户端后,继续调用扫描算子对分配的分区序号对应的分区进行扫描;
24、如果扫描算子返回的元组为空,从分配的分区序号中获取下一个需要扫描的分区序号,根据获取的下一个需要扫描的分区序号对对应的分区进行扫描。
25、优选地,本专利技术在opengauss数据库中动态分区裁剪的方法,还包括:当不存在动态分区裁剪的查询条件时,采用partiterator算子根据静态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描。
26、根据本专利技术的第二方面,提供一种在opengauss数据库中动态分区裁剪的系统,包括动态分区裁剪服务端,用于:生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件;采用partiterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果;采用partiterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描。
27、优选地,本专利技术在opengauss数据库中动态分区裁剪的系统中的动态分区裁剪服务端包括:
28、执行计划生成模块,用于生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件;
29、动态分区裁剪模块,用于采用partiterato本文档来自技高网...
【技术保护点】
1.一种在openGauss数据库中动态分区裁剪的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件,包括:
3.根据权利要求1所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,采用PartIterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果,包括:
4.根据权利要求3所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,包括:
5.根据权利要求4所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,其特征在于,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,还包括:在完成对分区表中的分区进行动态裁剪后,从分区裁剪内存上下文切换到原来的内存上下
6.根据权利要求1所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,其特征在于,采用PartIterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描,包括:
7.根据权利要求6所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,其特征在于,采用PartIterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描,包括:
8.根据权利要求1所述的在openGauss数据库中动态分区裁剪的方法,其特征在于,其特征在于,所述方法包括:当不存在动态分区裁剪的查询条件时,采用PartIterator算子根据静态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描。
9.一种在openGauss数据库中动态分区裁剪的系统,其特征在于,所述系统包括动态分区裁剪服务端,用于:生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件;采用PartIterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果;采用PartIterator算子根据动态分区裁剪结果,将需要扫描的分区序号分配至扫描算子进行分区扫描。
10.根据权利要求9所述的在openGauss数据库中动态分区裁剪的系统,其特征在于,动态分区裁剪服务端包括:
...【技术特征摘要】
1.一种在opengauss数据库中动态分区裁剪的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的在opengauss数据库中动态分区裁剪的方法,其特征在于,生成执行计划,存储静态分区裁剪结果,获取并存储动态分区裁剪的查询条件,包括:
3.根据权利要求1所述的在opengauss数据库中动态分区裁剪的方法,其特征在于,采用partiterator算子根据动态分区裁剪的查询条件进行动态分区裁剪,获得动态分区裁剪结果,包括:
4.根据权利要求3所述的在opengauss数据库中动态分区裁剪的方法,其特征在于,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,包括:
5.根据权利要求4所述的在opengauss数据库中动态分区裁剪的方法,其特征在于,其特征在于,当执行计划中存在动态分区裁剪的查询条件,根据动态分区裁剪的查询条件对分区表中的分区进行动态裁剪,获得动态分区裁剪结果,还包括:在完成对分区表中的分区进行动态裁剪后,从分区裁剪内存上下文切换到原来的内存上下文,通过重置分区裁剪内存上下文清理动态分区裁剪时申请的内存。
6.根据权利要求1所述的在opengauss数据库中动态分区裁剪...
【专利技术属性】
技术研发人员:陈雨纯,何小栋,
申请(专利权)人:广州海量数据库技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。