关于 OceanBase 分布式执行计划中处理数据倾斜的动态分区剪枝(Dynamic Partition Pruning)机制,以下描述正确的是?

A. 动态分区剪枝适用于分区键与连接条件相关但优化器无法在编译时确定目标分区的场景,运行时通过 Probe 端的实际值动态计算需要扫描的分区,避免全分区扫描。

B. 动态分区剪枝仅在执行 Nested Loop Join 时生效,对于 Hash Join 或 Merge Join 无法触发,因为动态剪枝需要逐行驱动。

C. 动态分区剪枝会显著增加执行时的 CPU 开销,因此生产环境默认关闭,用户需通过 ENABLE_DYNAMIC_PRUNING Hint 手动开启。

D. 动态分区剪枝只能用于一级分区表,二级分区表由于分区层级复杂,优化器无法实现运行时的动态剪枝。

2 个赞

解析
动态分区剪枝是 OceanBase 针对数据倾斜或查询条件无法在编译期确定分区范围时的优化手段。例如,当一个大表与一个小表进行连接,且大表的分区键与小表的连接列相关,但优化器无法提前知道小表的具体值来剪枝时,会在运行时根据小表扫描出的实际值,动态计算大表需要扫描的分区集合,从而避免扫描所有分区。该机制尤其适用于分区数量多且查询条件选择性强的场景。

  • A 正确 :描述了动态分区剪枝的核心应用场景和工作原理。
  • B 错误 :动态分区剪枝同样适用于 Hash JoinMerge Join ,并非仅限 Nested Loop Join。执行引擎可以在 Hash Join 的 Probe 阶段根据输入动态计算目标分区。
  • C 错误 :动态分区剪枝默认开启 (通过 ob_enable_dynamic_partition_pruning 参数控制,默认 TRUE),且其优化收益通常远大于运行时开销,不会默认关闭。
  • D 错误 :动态分区剪枝支持二级分区表 ,可以在运行时分别对一级分区和二级分区进行动态剪枝,实现双重过滤。
3 个赞

正确答案:A

2 个赞

不错不错

2 个赞

不错不错

very good