关于 OceanBase 并行执行中 DFO(Data Flow Operator)的调度机制,以下说法正确的是?

关于 OceanBase 并行执行中 DFO(Data Flow Operator)的调度机制,以下说法正确的是?

A. 一个 DFO 是并行执行的最小调度单元,每个 DFO 只能在一个 OBServer 节点上执行,不能跨节点。

B. 当查询包含多个 DFO 时,下游 DFO 必须等待上游 DFO 完全执行完毕后才能启动,无法流水线并行。

C. 优化器在生成分布式执行计划时,会根据数据重分发(EXCHANGE)操作将计划拆分为多个 DFO,每个 DFO 内部的数据分发是确定的。

D. 并行查询的 DFO 数量由用户指定的 PARALLEL Hint 直接决定,每个 DFO 的并行度等于查询整体 DOP。

解析
OceanBase 的分布式执行计划由多个 DFO 组成,DFO 的拆分以 EXCHANGE 操作为边界。每个 DFO 内部的数据流和处理逻辑是自包含的,通过 EXCHANGE 算子完成 DFO 之间的数据传递。优化器会根据数据分布、分区方式等因素确定每个 DFO 内的数据分发策略(如 HASH 分发、RANGE 分发、BROADCAST 等)。

  • A 错误 :一个 DFO 可以跨多个 OBServer 节点并行执行 ,DFO 内部的任务(Task)会被调度到多个节点上同时运行,每个节点执行 DFO 的一个分区(Partition)。DFO 是最小调度单元的说法也欠妥,准确说是 Task 是调度单元。
  • B 错误 :OceanBase 支持流水线并行 (Pipeline Parallelism),下游 DFO 可以在上游 DFO 产出部分数据后立即启动执行,无需等待全部完成,降低数据延迟和中间结果存储开销。
  • C 正确 :EXCHANGE 操作是 DFO 的分界点,每个 DFO 内部的数据分发策略由优化器根据统计信息和数据分布确定,保证数据在 DFO 内部正确处理。
  • D 错误 :DFO 的数量由执行计划的结构 决定,而非由 DOP 直接决定。同一个查询的 DFO 数量是固定的,但每个 DFO 的并行度可以等于查询整体 DOP(实际可能受资源限制调整)。选项 D 的问题在于“由 PARALLEL Hint 直接决定”是错误的,Hint 主要影响 DOP,不直接决定 DFO 数量。

正确答案:C