分布式执行计划调度 疑问?

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001500476
阅读了上面链接后,还是分不清楚, 从执行计划看,怎么看出是一个DFO 还是两个DFO呢??
或者从哪个算子 上能直接看出来呢 ?

同问

在执行计划生成的最后阶段,以 EXCHANGE 节点为界,拆分成多个子计划,每个子计划被封装成为一个 DFO,在并行度大于 1 的场景下,会一次调度两个 DFO,依次完成 DFO 树的遍历执行;在并行度等于 1 的场景下,每个 DFO 会将产生的数据存入中间结果管理器,按照后序遍历的形式完成整个 DFO 树的遍历执行。

目前PX的基础调度方式是两DFO调度:即自底向上,自左向右,依次调度每一对DFO,当前DFO执行完成之后才会调度下一个DFO执行。

对于该计划,PX首先会调度T1 NLJ T2的这一对DFO执行,等T1表的数据发送完成之后就会调度NLJ T3的DFO执行。

由于limit算子在最后一个DFO,所以它只能提前结束最后一对DFO的执行,对于之前调度的DFO,仍然需要完整执行计划,即T1表需要扫描全表的数据量。

1 个赞


参考楼上淇铭老师所说划分是以 EXCHANGE 节点为界按照我右边画的红线来看更容易分辨了

使用按个关键字 确定 是 1个 DFO 吗 ? 或者两个DFO 同时启动的

image
boradcast 判断启动了 两个DFO


从官方的文档解释来看 并没有说是这个关键字 如果并行度大于1的话 会调度两个DFO 上面我也有解释


单单 从这个图怎么区分 DFO 啊 ?? 那一块是第一个DFO

EXCHANGE 节点为界,拆分成多个子计划,每个子计划被封装成为一个 DFO
对于该计划,PX首先会调度T1 NLJ T2的这一对DFO执行,等T1表的数据发送完成之后就会调度NLJ T3的DFO执行。

但从执行计划能看出 并行度 是几不 ?DOP

explain extended 详细的执行计划 下面的output详情 会有说明