一种数据查询调度死锁的检测方法、装置及设备与流程

文档序号:36634500发布日期:2024-01-06 23:22阅读:26来源:国知局
一种数据查询调度死锁的检测方法、装置及设备与流程

本申请涉及计算机,具体涉及一种数据查询调度死锁的检测方法、装置及设备。


背景技术:

1、公用表表达式cte是一种常用的结构化查询语言语法,用来定义查询中的公共临时表。查询过程通常会被构建成流水线,查询过程为自顶向下调度,自底向上执行。

2、哈希连接hash join是一种用于连接两个表的多表操作方式。当查询过程的流水线中既出现cte的使用也出现哈希连接的使用时,可能会存在调度死锁的情况,进而导致查询失败。目前,亟需一种调度死锁的检测方法,以检测查询过程中是否存在调度死锁。


技术实现思路

1、有鉴于此,本申请提供一种数据查询调度死锁的检测方法、装置及设备,能够较为精准地检测出查询过程中是否存在调度死锁的情况。

2、为解决上述问题,本申请提供的技术方案如下:

3、第一方面,本申请提供一种数据查询调度死锁的检测方法,所述方法包括:

4、获取查询语句,生成所述查询语句对应的查询计划树;所述查询计划树中包括多个算子节点以及多个所述算子节点之间的查询逻辑关系;所述算子节点包括公共临时表生产算子节点、公共临时表消费算子节点以及哈希连接算子节点;

5、遍历所述查询计划树,确定所述查询计划树中的至少一条右表链;所述右表链包括所述查询计划树中的叶子节点以及非所述哈希连接算子节点的根节点;当所述右表链中的算子节点的父亲节点为所述哈希连接算子节点时,所述算子节点为其父亲节点的右子节点,且所述右表链包括所述算子节点的父亲节点;

6、从所述右表链的叶子节点开始自底向上遍历所述右表链中的算子节点,并遍历所述查询计划树的其他算子节点,分析所述查询计划树中的遍历到的算子节点之间的执行次序关系,查找所述查询计划树中存在调度依赖关系的两个相同公共临时表消费算子节点;所述调度依赖关系表示两个相同所述公共临时表消费算子节点之间的执行次序不同;

7、当所述存在调度依赖关系的两个相同公共临时表消费算子节点的上游算子节点为同一公共临时表生产算子节点时,确定存在调度死锁。

8、第二方面,本申请提供一种数据查询调度死锁的检测装置,所述装置包括:

9、生成单元,用于获取查询语句,生成所述查询语句对应的查询计划树;所述查询计划树中包括多个算子节点以及多个所述算子节点之间的查询逻辑关系;所述算子节点包括公共临时表生产算子节点、公共临时表消费算子节点以及哈希连接算子节点;

10、第一确定单元,用于遍历所述查询计划树,确定所述查询计划树中的至少一条右表链;所述右表链包括所述查询计划树中的叶子节点以及非所述哈希连接算子节点的根节点;当所述右表链中的算子节点的父亲节点为所述哈希连接算子节点时,所述算子节点为其父亲节点的右子节点,且所述右表链包括所述算子节点的父亲节点;

11、查找单元,用于从所述右表链的叶子节点开始自底向上遍历所述右表链中的算子节点,并遍历所述查询计划树的其他算子节点,分析所述查询计划树中的遍历到的算子节点之间的执行次序关系,查找所述查询计划树中存在调度依赖关系的两个相同公共临时表消费算子节点;所述调度依赖关系表示两个相同所述公共临时表消费算子节点之间的执行次序不同;

12、第二确定单元,用于当所述存在调度依赖关系的两个相同公共临时表消费算子节点的上游算子节点为同一公共临时表生产算子节点时,确定存在调度死锁。

13、第三方面,本申请提供一种电子设备,包括:

14、一个或多个处理器;

15、存储装置,其上存储有一个或多个程序,

16、当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任一所述的数据查询调度死锁的检测方法。

17、第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现任一所述的数据查询调度死锁的检测方法。

18、由此可见,本申请具有如下有益效果:

19、本申请提供了一种数据查询调度死锁的检测方法、装置及设备,先获取查询语句,并生成该查询语句对应的查询计划树。查询计划树中包括多个算子节点以及多个算子节点之间的查询逻辑关系。算子节点包括公共临时表生产算子节点、公共临时表消费算子节点以及哈希连接算子节点,则该查询计划树中可能存在调度死锁。基于此,遍历查询计划树,确定查询计划树中的至少一条右表链。右表链包括查询计划树中的叶子节点和哈希连接算子节点。当右表链中的算子节点的父亲节点为哈希连接算子节点时,算子节点为其父亲节点的右子节点,且右表链包括算子节点的父亲节点;当查询计划树的根节点非哈希连接算子节点时,右表链包括根节点。可知,右表链中包括哈希连接算子节点以及哈希连接算子节点的右子节点,则当查询计划树中存在调度死锁时,通常是查询计划树除右表链之外的链路对右表链中哈希连接算子节点的右子链路之间的调度依赖所导致的。具体为,查询计划树除右表链之外的链路中的公共临时表生产算子节点对右表链中哈希连接算子节点的右子链路中的同一公共临时表生产算子节点产生的调度依赖。

20、因此,本申请以每条右表链为遍历基准,从右表链的叶子节点开始自底向上遍历右表链中的算子节点,并遍历查询计划树的其他算子节点,分析查询计划树中的遍历到的算子节点之间的执行次序关系。执行次序关系能够进一步用于分析查询计划树中的两个相同公共临时表消费算子节点之间是否存在调度依赖。由此,查找查询计划树中存在调度依赖关系的两个相同公共临时表消费算子节点,且当存在调度依赖关系的两个相同公共临时表消费算子节点的上游算子节点为同一公共临时表生产算子节点时,确定存在调度死锁。如此,能够较为精准地确定查询计划树中是否存在调度死锁的情况,还能够较为精准地确定导致调度死锁的公共临时表消费算子节点和公共临时表生产算子节点。



技术特征:

1.一种数据查询调度死锁的检测方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述遍历所述查询计划树,确定所述查询计划树中的至少一条右表链,包括:

3.根据权利要求1或2所述的方法,其特征在于,所述从所述右表链的叶子节点开始自底向上遍历所述右表链中的算子节点,并遍历所述查询计划树的其他算子节点,分析所述查询计划树中的遍历到的算子节点之间的执行次序关系,包括:

4.根据权利要求1所述的方法,其特征在于,所述从所述右表链的叶子节点开始自底向上遍历所述右表链中的算子节点,并遍历所述查询计划树的其他算子节点,分析所述查询计划树中的遍历到的算子节点之间的执行次序关系,查找所述查询计划树中存在调度依赖关系的两个相同公共临时表消费算子节点,包括:

5.根据权利要求4所述的方法,其特征在于,所述从所述右表链的叶子节点开始自底向上遍历所述右表链中的算子节点,并遍历所述查询计划树的其他算子节点,为遍历到的所述算子节点赋予次序值,包括:

6.根据权利要求1所述的方法,其特征在于,所述公共临时表生产算子节点用于生成公共临时表,以传递给所述公共临时表消费算子节点进行使用;

7.根据权利要求1所述的方法,其特征在于,所述方法还包括:

8.一种数据查询调度死锁的检测装置,其特征在于,所述装置包括:

9.一种电子设备,其特征在于,包括:

10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7中任一所述的数据查询调度死锁的检测方法。


技术总结
本申请公开一种数据查询调度死锁的检测方法、装置及设备,由查询语句生成的查询计划树中包括公共临时表生产算子节点、公共临时表消费算子节点和哈希连接算子节点。确定树中的至少一条右表链。右表链包括叶子节点,右表链中算子节点的父亲节点为哈希连接算子节点时,该算子节点为其父亲节点的右子节点,右表链包括该父亲节点,右表链还包括非哈希连接算子节点的根节点。从右表链的叶子节点自底向上遍历右表链中的算子节点,并遍历树中其他算子节点,分析树中遍历到的算子节点之间的执行次序关系。当基于执行次序关系查找到树中存在有调度依赖的两个相同公共临时表消费算子节点,且其上游算子为同一公共临时表生产算子时,确定存在调度死锁。

技术研发人员:王涛,孟涛,许海涛
受保护的技术使用者:北京火山引擎科技有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1