首批通过分布式安全可靠测评,为关键业务系统打造
并行开启方式及优先级
更新时间:2026-06-23 17:19:16
OceanBase 数据库优化器支持通过并行执行来优化 SQL 查询时间。在优化器中,可以使用并行度 DOP(Degree of Parallel)来描述并行资源量。在实际业务场景中,关于是否需要开启并行执行以及所需的 DOP 大小,需要综合考虑查询的执行实际情况和业务需求,以经验为基础来确定所需的并行度。
OceanBase 数据库目前支持通过 Auto DOP、Hint、系统变量、Schema DOP 等多种方式对查询开启并行执行。但在如下场景中暂不支持并行:
- 当涉及 PL UDF/dblink 的场景时,禁止查询开启并行执行。
- 对于使用 DAS 扫描的基表,不支持指定并行度,在计划形态上显示并行度为 1。
在查询支持并行执行的前提下,多种并行开启方式优先级由高到低的顺序如下:
- 表级并行 Hint 配置 DOP
- 全局并行 Hint 配置 DOP
- 系统变量配置 DOP
- Schema DOP
表级并行 Hint 配置 DOP
表级并行 Hint 配置 DOP 是指在 Hint 中直接指定表对象的并行度。基本 SQL 语法如下:
/*+PARALLEL ( @qb_name table_name dop_value)*/
例如查询 Q1 分别指定表 t1 和 t2 分别按照 DOP = 8 及 DOP = 4 并行执行。示例如下:
Q1: SELECT /*+PARALLEL(t1 8) PARALLEL(t2 4)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
对于查询中没有使用 Hint 指定并行度的表,会按照其它优先级更低的方法确定 DOP。例如查询 Q2 仅指定表 t1 按照 DOP = 8 并行执行,如果没有以其它方式开启并行,表 t2 将以 DOP = 1,即不开启并行的方式进行扫描。
Q2: SELECT /*+PARALLEL(t1 8)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
全局并行 Hint 配置 DOP
全局并行 Hint 用于指定查询默认使用的并行度。基本 SQL 语法如下:
/*+PARALLEL ( dop_value )*/
/*+PARALLEL ( AUTO )*/
/*+PARALLEL ( MANUAL )*/
例如查询 Q3 中 PARALLEL( 8 ) 指定查询中表 t1 和 t2 均使用 DOP = 8。
全局并行 Hint 也可以指定查询使用的并行度获取策略,例如查询 Q4 中 PARALLEL ( AUTO ) 指定查询中所有表使用 Auto DOP 的并行度获取策略。
由于全局并行 Hint 优先级低于表级并行 Hint,当同时存在全局和表级并行 Hint 时,全局 Hint 仅对没有表级 Hint 生效的表上生效。例如查询 Q5 中表 t1 因为表级 Hint 而使用 DOP = 8,表 t2 因为全局 Hint 而使用并行度 DOP = 4;查询 Q6 中,表 t1 因表级 Hint 使用 DOP = 8,表 t2 根据 Auto DOP 策略自动获取 DOP 值。
Q3: SELECT /*+PARALLEL(8)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
Q4: SELECT /*+PARALLEL(AUTO)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
Q5: SELECT /*+PARALLEL(t1 8) PARALLEL(4)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
Q6: SELECT /*+PARALLEL(t1 8) PARALLEL ( AUTO )*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
系统变量配置 DOP
并行度相关的系统变量有两种,分别用于 DOP 获取策略配置与固定 DOP 配置。
DOP 获取策略配置通过配置在 GLOBAl 或 SESSION 级别的 parallel_degree_policy 变量来启用 Auto DOP 策略。Auto DOP 策略下,将按照一定算法计算得到表对象的 DOP 值。详细信息,请参见 Auto DOP 策略的开启。
如果通过全局 PARALLEL Hint 指定 DOP 或开启 Auto DOP 策略,又或者通过 parallel_degree_policy 变量开启了 Auto DOP 策略,则固定 DOP 的配置将无效。对于其他场景,可以通过如下内部系统变量对查询或 DML 使用的并行度进行配置。示例如下:
SET _enable_parallel_query = 1;
SET _enable_parallel_dml = 1;
SET _force_parallel_query_dop = 8;
SET _force_parallel_dml_dop = 8;
Schema DOP
当使用固定 DOP 策略,并且使用如下内部系统变量配置开启并行,但设置 DOP = 1 时,则查询将使用创建表时指定的 DOP 对表的对象开启并行执行。
SET _enable_parallel_query = 1;
SET _enable_parallel_dml = 1;
SET _force_parallel_query_dop = 1;
SET _force_parallel_dml_dop = 1;
如下示例中,创建表 t1 指定表 DOP = 8。使用 ALTER TABLE 调整表 t1 的 DOP 为 4,使用 ALTER INDEX 调整索引 idx1 的 DOP 为 2,则之后的查询将使用调整后的 DOP 对表的对象和索引开启并行执行。
CREATE TABLE t1(c1 INT, c2 INT, c3 INT) PARALLEL 8;
CREATE INDEX idx1 ON t1(c1);
ALTER TABLE t1 PARALLEL 4;
ALTER INDEX idx1 PARALLEL 2;