首批通过分布式安全可靠测评,为关键业务系统打造
AUTO DOP 并发选择不佳
更新时间:2026-05-15 09:06
问题现象
为了加速查询并满足业务需求,通常以并行执行来优化查询时间。在优化器中,并行资源量可以使用并行度(DOP:Degree of Parallel)来描述,在实际业务场景中,并行是否开启及并行度大小,根据查询的执行实际情况和业务需求以经验为基础来决定,并行资源为多少才合适呢?大部分数据库提及能够自动调整并行度,并通过一些配置限制查询最大并行度满足业务需求,OceanBase 数据库在 V4.2.x 版本支持的 Auto DOP 自动调整并行度的特性,本文描述了方法和案例帮助用户排查 Auto DOP 并发选择不佳的问题。
问题一: 客户开启自动并行功能对慢 SQL 加速阈值设置 3s,但 10s SQL 耗时不变发现并行度为 1 将阈值改到 100ms 并行度依然为 1。
问题二: Auto DOP 并发选择度不够,导致执行较慢。
关键信息
确定是否开启。
-- 在全局级别启用 Auto DOP set global parallel_degree_policy = AUTO; -- 在 session 级别启用 Auto DOP set session parallel_degree_policy = AUTO; set parallel_degree_policy = AUTO; -- 在全局级别关闭 Auto DOP set global parallel_degree_policy = MANUAL; -- 在 session 级别关闭 Auto DOP set session parallel_degree_policy = MANUAL; set parallel_degree_policy = MANUAL;观察 explain extended 中的 Optimization Info: 关键字 dop_method:Auto DOP 观察表的大小,还有分析两个相关的变量会影响获取的 DOP 大小
parallel_degree_limit和parallel_min_scan_time_threshold的值。Optimization Info: ------------------------------------- hj_unpay_bill: table_rows:2052731 physical_range_rows:1465752 logical_range_rows:1437633 index_back_rows:0 output_rows:1437633 table_dop:3 dop_method:Auto DOP
通常遇到 parallel_degree_limit 设置太小导致并行度低的问题可以查询 sql audit 观察 EXPECTED_WORKER_COUNT 和 USED_WORKER_COUNT 来确定。
问题原因
问题一: 客户开启自动并行功能对慢 SQL 加速阈值设置 3s,但 10s SQL 耗时不变发现并行度为 1 将阈值改到 100ms 并行度依然为 1。
Auto DOP 仅基于查询执行成本进行评估,以减小响应时间(RT)为目标来决定是否启用并行处理及计算 DOP。若业务负载中包含对用户不关心的慢查询,这种问题首先检查 explain extended 中的 Optimization Info: 信息。
Optimization Info:
a00:
table_rows:43
physical_range_rows:44
logical_range_rows:44
table_dop:1
dop_method:Auto DOP

系统变量 parallel_min_scan_time_threshold 设置了对于基表扫描开启并行执行的参考基表扫描执行时间。使用 Auto DOP 策略计算基表并行度时,基表扫描估计执行时间超过 parallel_min_scan_time_threshold 设定值时,增加并行度开启并行,默认值 1000 单位 ms。客户sql中的的这张表 a00 太小了 table_rows:43,parallel_min_scan_time_threshold 阈值改到 100ms 也达不到没法触发并行。
问题二: Auto DOP 并发选择度不够,导致执行较慢。
对于客户遇到的问题,需要分析两个相关的变量会影响获取的 DOP 大小。
变量
parallel_degree_limit限制 Auto DOP 策略时允许使用的最大 DOP。变量
parallel_min_scan_time_threshold是在 Auto DOP 策略中用于计算并行度的参数,表示对基表扫描开启并行的参考执行时间。当基表扫描评估执行时间超过这个设定值时,会对基表扫描开启并行,并利用这个设定值计算一个合适的并行度。
Optimization Info: ------------------------------------- hj_unpay_bill: table_rows:2052731 physical_range_rows:1465752 logical_range_rows:1437633 index_back_rows:0 output_rows:1437633 table_dop:3 dop_method:Auto DOP
变量默认值设置为 1000 单位毫秒。通过调小 parallel_min_scan_time_threshold 的值,可以降低对基表开启并行的门限制,允许对评估执行时间更小基表扫描开启并行,对已经开启并行且数据量固定的表,也会使用更大的并行度进行扫描。如果客户需要获得更大的并行度,可以调小 parallel_min_scan_time_threshold 的值,调整到 10ms 并行度符合客户的预期。
问题的风险及影响
开启 Auto DOP 功能,必须评估系统业务负载类型,并合理的配置几个相关系统变量。否则,功能开启后可能不仅对系统没有优化效果,还会造成极大系统风险。TP 系统强烈不建议打开 Auto DOP 功能,打开后,能够利用上 Auto DOP 并行的负载有可能霸占系统线程资源导致其他负载受到影响。AP也强烈建议经过测试后,可控在决定是否打开(例如对负载情况和 parallel_degree_limit 配置都有管控)。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.2.x 版本。