基于谓词规约和代价估算的局部多查询优化方法与流程

文档序号:12271521阅读:168来源:国知局
基于谓词规约和代价估算的局部多查询优化方法与流程

本发明涉及大数据查询优化领域,尤其涉及一种基于谓词规约和代价估算的局部多查询优化方法。



背景技术:

早期查询优化和调度等问题的研究主要针对单查询,但随着并发量的提升,以及数据查询系统的不断改进,查询并发处理已经成为现代数据查询系统必不可少的功能。当并发查询由相关(涉及相同或相近操作)的查询构成时,传统的单查询优化方法并不考虑查询之间的相关性,从而限制了系统查询性能的提升。

多查询优化是当系统同时输入多个查询时,通过对该批查询进行分析,将其中涉及相同或相近操作的部分进行合并,生成全局多查询计划。通过该多查询计划的执行来同时完成多个查询,提高查询效率。

多查询优化方法可以分为两类:一类是全局多查询优化方法,其输入为未经优化的查询集合,此类方法的优点是生成的候选执行计划数量大,输出的结果往往较优,缺点是优化搜索开销高,同时由于无法利用数据查询系统的优化器,因而实现难度较高;另一类是局部多查询优化方法,其输入为数据查询系统优化器输出的查询集合,此类方法的优点是搜索空间较小,同时较易实现。由于局部多查询优化方法往往不考虑重用中间结果带来的开销,因而在实际执行中可能导致重用中间结果的开销高于直接执行的开销,反而降低了系统查询性能。

现有多查询优化方法在利用代价函数估算查询计划开销时,仅仅考虑了I/O开销,即查询处理所涉及的磁盘页面数,而忽视了CPU计算开销和网络传输开销。然而,当底层采用分布式计算架构(如大部分的大数据查询系统)并且存在连接操作时,CPU计算和网络传输的开销不可忽略。此时原有的代价模型显然无法准确地估计查询的开销。



技术实现要素:

针对以上描述的现有技术的不足,本发明提供了基于谓词规约和代价估算的局部多查询优化方法,能够对查询之间相同或相近的中间结果加以利用,减少重复操作,从而提升并发查询性能,减少查询响应时间。

基于谓词规约和代价估算的局部多查询优化方法分为预处理、局部多查询优化处理和多查询计划优化三个阶段,具体实施步骤如下:

(1)预处理阶段:

步骤(1-1),利用数据查询系统已有的查询优化器,对查询集合中的每条查询进行优化,分别找到最优的查询计划,并以查询计划树的形式表示,最后得到查询计划树集合;

步骤(1-2),重新定义查询计划树中的节点编号;

步骤(1-3),定义节点映射关系map<Node key,Node value>M,并将M初始化为空;

步骤(1-4),将所有的查询计划树中的节点添加至全局多查询计划树中,并在全局多查询计划树中添加“超根节点”;

在步骤(1-2)中,重写查询计划树中的节点编号是用于生成全局多查询计划树中节点的序号。

在步骤(1-3)中,映射关系map<Node key,Node value>M表明key节点将会重用value节点得到的结果,map为数据类型,M为变量名称,属于map数据类型,用于存储节点key到节点value的映射关系。

在步骤(1-4)中,“超根节点”指向查询计划树集合中各个查询的根节点。

本发明使用局部多查询优化方法,利用数据查询系统已有的查询优化器为每条查询语句找到优化后的查询计划,减少了算法搜索空间,缩短了查询优化算法执行时间。

(2)局部多查询优化处理阶段:

步骤(2-1),遍历查询全局多查询计划树中的节点集合V={v1,v2,...,vn},若集合V中存在与当前节点等价的节点,选择节点集合V中等价查询节点中编号最小的节点vj*,进行合并操作,用vj*代替所有vi∈V-{vj*};

步骤(2-2),对于每个节点vi,找到符合“最强归约条件”的子任务taskj*,在M中添加vj*到vi,的映射,通过有向线段连接vj*→vi,并改变vj*的操作描述,以节点vi所对应的子任务taski的结果作为子任务taskj*的输入;

步骤(2-3),重复步骤(2-1)和步骤(2-2),对全局多查询计划树中的节点进行等价替换和规约,直到无法进一步简化全局多查询计划树为止;

在步骤(2-1)中,判断两个节点是否属于等价关系的过程主要包括:

(a)以两个节点的类型一致并且执行在相同的表和列上为条件进行判断,如不满足条件则返回false,表明两个节点不符合等价关系;

(b)根据节点类型分别进行等价关系判定:若节点均为磁盘扫描节点,则需要根据节点中的谓词,判断两个节点是否是对于相同列上相同范围的数据选择,若符合条件,则返回true,表明等价关系;反之返回false,表明不符合等价关系;

(c)若节点均为连接节点,则首先需要通过判断连接条件是否相同,若相同,则递归判断其左右孩子是否等价,由于连接操作可能存在两种树形结构,即左右孩子节点交换,因此需要分别判断。如果其中一种树形符合等价关系,则返回true表明符合等价关系,反之返回false;

(d)若节点为其他节点,包括聚合操作节点以及数据传输节点,则递归判断其孩子节点是否等价。

在步骤(2-2)中,vj*→vi表示数据的流动方向。

在步骤(2-2)中,对于每个子任务taski,如果taski的执行结果包含了其他子任务的结果,则认为其他子任务可以被规约到taski。能够被规约到taski的所有子任务中,结果与taski最相近的子任务被称为符合“最强归约条件”的子任务taskj*

在步骤(2-2)中,所述的结果为任务执行完成后得到的中间数据。

在步骤(2-3)中,判断全局多查询计划树中的节点是否属于规约关系的过程主要包括:

首先,判断两个节点的类型是否均为磁盘扫描节点,如不满足条件则返回false,表明两个节点不符合规约关系;

其次,判断两个节点是否执行在相同的表和列上,若不满足条件,则返回false,表明两个节点不符合等价关系;

最后,根据规约关系表判断两个节点的规约关系,若符合规约关系则返回true,反之返回false。规约关系表如表1所示。

表1归约关系依赖表

①(a1=>b1and a2=>b2)or(a1=>b2and a2=>b1)or(a=>b1)or(a=>b2)

上表中的m、n表示整数或浮点数,当谓词a、b中的m和n符合关系表中的大小关系时,即表明a可以规约到b。当b由b1和b2两个谓词以and关系组成时,同样需要判断a与b1、b2的规约关系。例如b由b1:col1<8与b2:col1>3组成,a为col1>2,此时b2可以规约到a,因此b可以规约到a。

在步骤(2-3)中,由于步骤(2-1)和步骤(2-2)的过程会改变全局多查询计划树的结构,从而导致全局多查询计划树节点对应任务的执行开销发生变化,因此重复步骤(2-1)和步骤(2-2),对全局多查询计划树中的节点进行等价替换和规约,直到无法进一步简化全局多查询计划树为止。

(3)多查询计划优化阶段:

步骤(3-1),获取局部多查询优化处理阶段得到的映射关系和全局多查询计划树;

步骤(3-2),根据映射关系map<Node key,Node value>M,遍历全局多查询计划树中的节点,若遍历完成,则执行步骤(3-8);

步骤(3-3),根据不同任务对应的代价模型,估算直接开销和重用开销;

步骤(3-4),对比重用开销和直接开销,若重用开销大于直接开销,则执行步骤(3-5);若重用开销小于直接开销,则执行步骤(3-6);

步骤(3-5),将映射关系中节点对应的关系映射为自己,不利用中间结果直接执行节点对应的任务,然后执行步骤(3-7);

步骤(3-6),重复步骤(3-3)和步骤(3-4),判断是否存在重用开销更低的节点,若存在则更新映射关系,将该节点映射到重用开销更低的节点;

步骤(3-7),重复步骤(3-2);

步骤(3-8),返回全局多查询计划树。

步骤(3-3)中,若映射关系中某个节点被映射到另一个节点,表明该节点对应的任务执行结果依赖于另一个节点(依赖节点)对应任务的执行结果。

在步骤(3-3)中,由于查询由多个子任务组成,因此根据不同任务对应的代价模型估算直接开销、重用开销以及中间结果的网络传输开销。

在步骤(3-3)中,所述的直接开销为全局多查询计划树中的节点直接执行对应任务的CPU计算开销;所述的重用开销为依赖节点对应任务的CPU计算开销以及对所依赖节点对应任务产生的结果进行网络传输和计算的开销。

在步骤(3-3)中,查询计划树有多个计划节点组成,每个节点对应查询中的一个任务,主要针对磁盘扫描任务,连接操作任务和网络传输任务进行建模,根据不同节点,估算不同任务的开销;代价模型及代价估算方法如下:

(a)磁盘扫描节点

当出现磁盘扫描节点时,表示将数据从磁盘读取至内存,并根据谓词筛选符合条件的数据的过程。数据读取代价由磁臂移动的平均寻道时间tseek、磁头平均转动延迟时间tlatency以及数据读取时间tread组成,谓词筛选的代价取决于具体的谓词以及数据分布;

当查询计划树节点为磁盘扫描节点时,使用磁盘扫描代价模型估算磁盘扫描任务的代价。

(b)连接操作节点

连接操作的时间由计算元组哈希值的时间thashTuple、将为右表数据在内存中构建哈希表的时间tbuild、将参与连接元组插入至哈希表的时间tinsertTuple以及左右表元组完成连接操作的时间tjoinTuple组成,各个执行时间主要由机器CPU性能,左表和右表的大小决定;

当查询计划树节点为连接操作节点时,使用连接操作代价模型估算连接操作任务的代价。

(c)数据传输节点

数据传输节点主要负责接受和汇聚传输得到的数据。数据传输任务会在不同主机上并行执行,因此该节点对应操作的完成时刻texchange取决于最后完成数据传输任务的时刻,传输的时间开销主要由字节数据量TransferByte和当前集群中的网络带宽Netband决定;

当查询计划树节点为数据传输节点时,使用数据传输代价模型估算数据传输任务的代价。

本发明在查询处理过程中构建代价模型,对不同操作给出了相应查询处理代价定义,提高了查询代价估算的准确性,便于算法选出高效的多查询计划。

在步骤(3-6),重用开销小于直接执行该节点对应任务的开销,表明可以使用所依赖任务的中间结果,此时重复步骤(3-3)和步骤(3-4),判断是否存在重用开销更低的节点,若存在则更新映射关系,将该节点映射到重用开销更低的节点。

本发明利用数据查询系统已有的查询优化器为每条查询语句找到优化后的查询计划,经过多次迭代对查询计划之间相同或相近的部分进行等价替换或规约,生成全局多查询计划,并通过估算重用开销,判断直接执行任务还是重用中间结果,对全局多查询计划进行优化,减少了查询响应时间。本发明相对传统多查询优化方法的优点包括:

(1)使用局部多查询优化方法,利用数据查询系统已有的查询优化器为每条查询语句找到优化后的查询计划,减少了算法搜索空间,缩短了查询优化算法执行时间;

(2)查询处理过程中构建代价模型,对不同操作给出了相应查询处理代价定义,提高了查询代价估算的准确性,便于算法选出高效的多查询计划;

(3)对生成的全局多查询计划进行优化,充分考虑中间结果重用产生的开销,避免了后续任务等待时间过长,保证了系统并发,提升了查询执行效率。

附图说明

图1:基于谓词规约和代价估算的局部多查询优化方法流程图;

图2:查询计划树示意图。

具体实施方式

为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。

如图1所示,基于谓词规约和代价估算的局部多查询优化方法分为预处理、局部多查询优化处理和多查询计划优化三个阶段。

(1)预处理阶段的主要步骤包括:

步骤(1-1),利用数据查询系统已有的查询优化器,对输入的查询集合中的每条查询进行优化,分别找到最优的查询计划,并以查询计划树的形式表示,最后得到查询计划树集合;

查询计划树表示为T(V,E,D),V是查询计划树中所有节点的集合,每个子任务对应一个查询计划树节点,节点包含一些操作信息(例如操作所涉及表和列等),E是查询计划树中所有边的集合,D为查询节点具体操作的描述(包括操作中涉及的谓词等)。查询计划树叶子节点为磁盘扫描节点,负责数据的读取,非叶子节点代表不同的代数操作。非叶子节点使用来自于其孩子节点的数据,节点之间以一条边连接,查询计划树如图2所示;

步骤(1-2),重新定义查询中的节点编号,用于生成全局多查询计划树中节点的序号;

步骤(1-3),定义节点映射关系map<Node key,Node value>M,并将M初始化为空;该映射关系表明key节点将会重用value节点得到的结果;然后将所有的节点添加至全局多查询计划树中,并在全局多查询计划树中添加“超根节点”,该节点指向查询计划树集合中各个查询的根节点。

(2)局部多查询优化处理阶段的主要步骤包括:

步骤(2-1),遍历查询节点的集合V={v1,v2,...,vn},若集合V中存在与当前节点等价的节点,选择集合V中等价查询节点中编号最小的点vj*,进行合并操作,即用vj*代替所有vi∈V-{vj*};

判断两个节点是否属于等价关系的过程主要包括:

(a)以两个节点的类型一致并且执行在相同的表和列上为条件进行判断,如不满足条件则返回false,表明两个节点不符合等价关系;

(b)根据节点类型分别进行等价关系判定:若节点均为磁盘扫描节点,则需要根据节点中的谓词,判断两个节点是否是对于相同列上相同范围的数据选择,若符合条件,则返回true,表明等价关系;反之返回false,表明不符合等价关系;

(c)若节点均为连接节点,则首先需要通过判断连接条件是否相同,若相同,则递归判断其左右孩子是否等价,由于连接操作可能存在两种树形结构,即左右孩子节点交换,因此需要分别判断。如果其中一种树形符合等价关系,则返回true表明符合等价关系,反之返回false;

(d)若节点为其他节点,包括聚合操作节点以及数据传输节点,则递归判断其孩子节点是否等价。

步骤(2-2),对于每个节点vi,找到符合“最强归约条件”的子任务taskj*,在M中添加vj*到vi,的映射,通过有向线段连接vj*→vi,并改变vj*的操作描述,以节点vi所对应的子任务taski的结果作为子任务taskj*的输入;

对于每个子任务taski,如果taski的结果包含了其他子任务的结果,则认为其他子任务可以被规约到taski。能够被规约到taski的所有子任务中,结果与taski最相近的子任务被称为符合“最强归约条件”的子任务taskj*

判断节点是否属于规约关系的过程主要包括:

首先,判断两个节点的类型是否均为磁盘扫描节点,如不满足条件则返回false,表明两个节点不符合规约关系;

其次,判断两个节点是否执行在相同的表和列上,若不满足条件,则返回false,表明两个节点不符合等价关系;

最后,根据规约关系表判断两个节点的规约关系,若符合规约关系则返回true,,反之返回false。规约关系表如表1所示。

步骤(2-3),由于步骤(2-1)和步骤(2-2)的过程会改变全局多查询计划树的结构,从而导致全局多查询计划树节点对应任务的执行开销发生变化,重复步骤(2-1)和步骤(2-2),对计划树中的节点进行等价替换和规约,直到无法进一步简化全局多查询计划树为止。

表1归约关系依赖表

①(a1=>b1and a2=>b2)or(a1=>b2and a2=>b1)or(a=>b1)or(a=>b2)

(3)多查询计划优化阶段的主要包括以下步骤:

步骤(3-1),获取局部多查询优化处理阶段得到的映射关系和全局多查询计划树;

步骤(3-2),根据映射关系map<Node key,Node value>M,遍历全局多查询计划树中的节点,若遍历完成,则执行步骤(3-8);

步骤(3-3),由于查询由多个子任务组成,根据不同任务对应的代价模型,估算直接开销、重用开销以及中间结果的网络传输开销;

代价估算方法如下所示:

(a)磁盘扫描节点

当出现磁盘扫描节点时,表示将数据从磁盘读取至内存,并根据谓词筛选符合条件的数据的过程。数据读取代价由磁臂移动的平均寻道时间tseek、磁头平均转动延迟时间tlatency以及数据读取时间tread组成,谓词筛选的代价取决于具体的谓词以及数据分布;

(b)连接操作节点

连接操作的时间由计算元组哈希值的时间thashTuple、将为右表数据在内存中构建哈希表的时间tbuild、将参与连接元组插入至哈希表的时间tinsertTuple以及左右表元组完成连接操作的时间tjoinTuple组成,各个执行时间主要由机器CPU性能,左表和右表的大小决定;

(c)数据传输节点

数据传输节点主要负责接受和汇聚传输得到的数据。数据传输任务会在不同主机上并行执行,因此该节点对应操作的完成时刻texchange取决于最后完成数据传输任务的时刻,传输的时间开销主要由字节数据量TransferByte和当前集群中的网络带宽Netband决定。

步骤(3-4),对比重用开销和直接开销,若重用开销大于直接开销,则执行步骤(3-5);若重用开销小于直接开销,则执行步骤(3-6);

步骤(3-5),将映射关系中节点对应的关系映射为自己,不利用中间结果直接执行节点对应的任务,然后执行步骤(3-7);

步骤(3-6),重复步骤(3-3)和步骤(3-4),判断是否存在重用开销更低的节点,若存在则更新映射关系,将该节点映射到重用开销更低的节点;

步骤(3-7),重复步骤(3-2);

步骤(3-8),返回全局多查询计划树。

以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1