暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Database Class 12:OceanBase 并行调度有什么方法?

SQL新手 2023-04-04
488

优化器生成并行计划后,QC 会将其切分成多个 DFO。如下图所示,t1 表和 t2 表做 HASH JOIN,切分成了 3 个 DFO,DFO 1 和 DFO 2 负责并行扫描数据,并将数据 HASH 到对应节点,DFO 3 负责做 HASH JOIN,并将最终的 HASH 结果汇总到 QC。

分布式6

QC 会尽量使用两组线程来完成计划的调度,上述示例中的调度流程如下:

  1. QC 首先会调度 DFO 1 和 DFO 3,DFO 1 开始执行后就开始扫数据,并吐给 DFO 3。

  2. DFO 3 开始执行后,首先会阻塞在 HASH JOIN 创建 Hash Table 的步骤上,也就是会一直会从 DFO 1 收集数据,直到全部收集完成,建立 Hash Table 完成。然后 DFO 3 会从右边的 DFO 2 收集数据。这时候 DFO 2 还没有被调度起来,所以 DFO 3 会等待在收数据的流程上。DFO 1 在把数据都发送给 DFO 3 后就可以让出线程资源退出了。

  3. 调度器回收了 DFO 1 的线程资源后,立即会调度 DFO 2。

  4. DFO 2 开始运行后就开始发送数据给 DFO 3 ,DFO 3 每收到一行 DFO 2 的数据就回到 Hash Table 中查表,如果命中,就会立即向上输出给 QC,QC 负责将结果输出给客户端。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论