概述
自适应并行(Auto DOP)是 TDSQL Boundless 并行查询的自动并行度(Degree Of Parallelism, DOP)能力。
在未开启 Auto DOP 时,单条查询的 DOP 由
max_parallel_degree 固定指定;开启 Auto DOP 后,优化器基于扫描代价自动计算 DOP,避免用户手动调优。注意:
使用限制
自适应并行只在解析后的并行度为 AUTO 时生效,开启方式有两类:
parallel_degree_policy = AUTO使用 HINT 显式指定 AUTO,例如
PARALLEL(auto)、PARALLEL(@qb auto)、PARALLEL(t auto DYNAMIC_RANGE)、PARALLEL(t auto PARTITION) 除此之外,需要注意以下限制:
表级 Auto DOP 只对部分扫描路径(即
DYNAMIC_RANGE 和 PARTITION 两种并行扫描类型,对扫描类型的介绍请参考 并行查询概述)生效。join 级 Auto DOP 只对 NESTED_LOOP_JOIN、NESTED_LOOP_SEMIJOIN_WITH_DUPLICATE_REMOVAL 和 BKA_JOIN 生效,不会对 HASH_JOIN 做额外的 DOP 调整。
如果 query block 或表级 HINT 已经显式指定了数值 DOP,则 Auto DOP 不再继续计算;
NO_PARALLEL() 也会直接关闭该对象上的 Auto DOP。分区并行扫描的 DOP 上限不会超过
min(max_parallel_degree, part_num);当 part_num 为 0 时直接 abort 为 no_partitions。AUTO 在 PARALLEL HINT 的上下文中会被当作关键字处理。如果表名、库名或别名本身叫 auto,在 HINT 里需要使用反引号,详细参考 优化器 Hints。
系统变量
Auto DOP 引入了以下两个系统变量,两者均为 SESSION 级、支持 HINT 修改,并且会随并行计划一起序列化到远端节点。纯属性(默认值/取值范围/级别)参见 并行查询系统变量,本节仅描述行为语义。
parallel_degree_policy
用途:控制并行度的决定方式。
可选值:
MANUAL:使用
max_parallel_degree 作为固定 DOP。AUTO:根据扫描代价自动计算 DOP,会将表级别的 DOP 不断调整,直到每个 Worker 的扫描代价降低到系统变量
parallel_scan_cost_threshold 以下。当 DOP 继续提升将超过 max_parallel_degree ,或优化器计算发现继续提升 DOP 无法降低扫描代价时,将会停止增加 DOP,防止系统资源浪费。默认值:MANUAL。
补充说明:
即使
parallel_degree_policy = MANUAL,仍然可以通过 PARALLEL(auto) 或 PARALLEL(@qb auto) 在语句级启用 Auto DOP。如果 query block 或表级 HINT 显式给出了数值 DOP,则该显式值优先,不再走 Auto DOP。
parallel_scan_cost_threshold
用途:控制并行扫描的代价阈值。
行为:
AUTO 模式下,优化器会尝试提升 DOP,直到每个 Worker 的扫描代价下降到这个阈值以下,或者已经没有继续提升的收益。
MANUAL 模式下,串行扫描代价低于该阈值的表不会进入并行扫描(该剪枝仅在未启用 Auto DOP 的表上生效)。