概述
并行度控制
TDSQL Boundless 中使用 DOP(Degree Of Parallelism)表示并行度,即查询中使用的并行 Worker 数量。TDSQL Boundless 目前支持手动设置并行度与 自适应并行 两种并行度控制策略。
变量名 | 级别 | 默认值 | 说明 |
max_parallel_degree | SESSION | 0 | 单条查询的最大 DOP。设为0关闭并行;大于0表示开启。在开启了 自适应并行 时,如果 parallel_degree_policy 为 MANUAL 模式(手动设置并行度),该值表示查询的默认 DOP;如果 parallel_degree_policy 为 AUTO 模式(自动设置并行度),该值表示自动设置的 DOP 上限 |
max_parallel_workers | GLOBAL | 10000 | 整个节点并行 Worker 总数上限。设为0全局禁用并行 |
阈值控制
变量名 | 级别 | 默认值 | 说明 |
parallel_plan_cost_threshold | SESSION | 50000 | 串行代价大于或等于该值才考虑生成并行计划 |
parallel_scan_records_threshold | SESSION | 10000 | 表预估访问行数大于或等于该值才将该表纳入并行扫描候选 |
parallel_scan_ranges_threshold | SESSION | 2 | 预估可切分范围数大于或等于该值才使用并行扫描 |
parallel_scan_cost_threshold | SESSION | 10000.0 | 并行扫描代价门控 |
并行度控制策略
变量名 | 级别 | 默认值 | 说明 |
parallel_degree_policy | SESSION | MANUAL | DOP 策略: MANUAL 使用 max_parallel_degree 作为固定 DOP;AUTO 由优化器基于扫描代价自动计算 DOP |
parallel_plan_compare_serial_cost | SESSION | false | 该值为真时,如果原始串行计划比并行计划代价更低,则此时会走串行计划;否则,默认会走代价最低的并行计划 |
功能开关
变量名 | 级别 | 默认值 | 说明 |
parallel_query_switch | SESSION | 见下表 | 并行查询功能位掩码总开关,详细默认值见下方。该选项为开发者选项,请勿在生产环境使用 |
tdsql_enable_parallel_hash_join | SESSION | false | |
single_delete_update_use_iterator | SESSION | false |
其中,
parallel_query_switch 选项表及默认值如下:选项 | 默认 | 说明 |
force | off | 强制使用并行计划,跳过代价与行数阈值检查 |
subquery_pushdown | on | 允许子查询完整下推到 Worker 并行执行 |
subquery_pre_evaluation | on | 允许 Leader 预先执行可缓存的子查询并缓存结果供 Worker 复用 |
full_grouping_pushdown | on | 当 Worker 间 GROUP BY 键值不重复时,将聚合完全下推到 Worker |
maximum_slices | off | 选优时偏好 Collector 最多的路径(最大化 Slice 数) |
group_min_max_pushdown | on | 支持 GROUP MIN MAX SCAN 使用并行计划 |
partition_group_min_max_pushdown | on | 支持分区表上的 GROUP MIN MAX SCAN 使用并行计划 |
dynamic_range_parallel_scan | on | 允许动态范围并行扫描 |
partition_parallel_scan | on | 允许分区并行扫描 |
rep_group_parallel_scan | off | 以 Replication Group 为最小分配单位,同一 Replication Group 的全部数据交给同一个并行 Worker |
警告:
parallel_query_switch 是一个开发者选项。每个发布都可能调整开关的内容(包括添加或删除),请勿在管理工具或正规的维护脚本中使用。使用方式
通用 SQL 语法示例:
-- 查看当前开关值SHOW VARIABLES LIKE 'parallel_query_switch';-- 强制并行(跳过所有阈值检查)SET parallel_query_switch = 'force=on';-- 关闭子查询下推到 Worker 执行SET parallel_query_switch = 'subquery_pushdown=off';