---
title: "Auto DOP - OceanBase 数据库 V4.3.3 | OceanBase 文档中心"
description: Auto DOP 为了加速查询并满足业务需求，通常以并行执行来优化查询时间。那么，并行资源为多少才合适呢？在优化器中，并行资源量可以使用并行度（DOP：Degree of Parallel）来描述，在实际业务场景中，并行是否开启及并行度大小，根据查询的执行实际情况和业务需求以经验为基础来决定。 在人为指定并行度时，可…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.3

# Auto DOP

更新时间：2026-04-10 12:01:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.3/zh-CN/620.obap/600.obap-query/300.obap-auto-dop.md)  

为了加速查询并满足业务需求，通常以并行执行来优化查询时间。那么，并行资源为多少才合适呢？在优化器中，并行资源量可以使用并行度（DOP：Degree of Parallel）来描述，在实际业务场景中，并行是否开启及并行度大小，根据查询的执行实际情况和业务需求以经验为基础来决定。

在人为指定并行度时，可以通过系统变量对当前会话中的所有执行查询开启并行，并指定并行度。然而，这对会话中本不需要并行加速或无需使用较高 DOP 的查询带来额外的并行执行开销，从而导致性能下降。另一方面，可以通过 hint 的方式来指定特定查询的并行度，但这需要对每一条业务查询进行单独考量，对于存在大量业务查询的情况，是不可行的。

为了解决手动指定并行度的不便和限制，查询优化器可以通过 Auto DOP 功能在生成查询计划时评估查询需要执行的时间，自动确定是否开启并行和开启适量的并行度。这样可以避免由于手动指定并行度而导致的性能下降。

#### 注意

- 开启 Auto DOP 后，需要关注调整 parallel_min_scan_time_threshold 和 parallel_degree_limit 两个相关参数的设置，否则 Auto DOP 可能对 AP 系统有不良影响。
 - Auto DOP 仅根据评估的查询执行开销，以减小 RT 为目标决策开启并行并计算 DOP，如果业务负载中存在用户不关注的慢查询，需要使用资源隔离手段进行处理，否则开启 Auto DOP 后，对所有查询使用 Auto DOP 给定并行度，将对系统造成不良影响。

## 开启 Auto DOP

优化器的 DOP 选择策略目前分为 AUTO 模式和 MANUAL 模式。AUTO 模式下优化器可以根据查询实际情况，自动选择开启并行，并确定并行度。MANUAL 模式仅能通过人为干预开启并行。

优化器的 DOP 选择策略有两种控制方式，可以通过系统变量 parallel_degree_policy 进行全局或 session 级别的 DOP 选择策略配置，也通过更高优先级的 hint 进行查询级别的 DOP 选择策略配置。

### 使用系统变量开启 Auto DOP

#### 注意

参数类型为系统变量，全局级别修改变量后，只有新建连接可以生效，已有连接需要断连。

```sql
-- 在全局级别启用 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;

```

### 使用 Hint 开启 Auto DOP

Hint 相比系统变量有更高的优先级，可以在查询级别控制开启/关闭 Auto DOP。

```cpp
-- 使用 hint 在查询级别启用 Auto DOP
select /*+parallel(auto)*/ * from t1;
-- 使用 hint 在查询级别关闭 Auto DOP
select /*+parallel(manual)*/ * from t1;
select /*+parallel(8)*/ * from t1;

```

## 相关参数设置

Auto DOP 计算查询 DOP 时，最终给定的 DOP 大小受下面两个系统变量影响。在不同部署资源和业务负载条件下，也可以通过调整这两个参数干预 Auto DOP 行为。

### parallel_min_scan_time_threshold

parallel_min_scan_time_threshold 用于设置对基表扫描开启并行的门限值，影响是否对查询开启并行和使用 DOP 的大小。参数单位为 ms，默认值为 1000，最小值为 10。

**使用场景：**

调整参数大小，控制 AP 系统中开启并行查询的数量与使用的并行度。开启 Auto DOP 后，如果部分关注的查询没有开启并行，或使用并行度较小且没有达到并行度的上限，可以调小 parallel_min_scan_time_threshold 的设定值，调整后会有更多查询开启并行，已开启并行的查询也可能使用更大并行度。相反情况，可以调大参数设定值。

为避免开启 Auto DOP 后大量查询以较高并行度开启并行、占用系统过多资源，参数默认值较为保守，开启 Auto DOP 一般需要评估系统负载情况，将参数调小到合适值。

**示例：**

```sql
-- 设置当前 session 基表扫描开启并行的评估代价门限值为 10ms
set parallel_min_scan_time_threshold = 10;

-- 设置全局基表扫描开启并行的评估代价门限值为 10ms
set global parallel_min_scan_time_threshold = 10;

```

```sql
explain select /*+parallel(auto)*/ * from t1;

-- 设置参数为 20, 最终使用 DOP 为 4, 开启并行后基表扫描评估代价为 12 ms
set parallel_min_scan_time_threshold = 20;
=========================================================
|ID|OPERATOR             |NAME    |EST.ROWS|EST.TIME(us)|
---------------------------------------------------------
|0 |PX COORDINATOR       |        |512000  |619089      |
|1 |└─EXCHANGE OUT DISTR |:EX10000|512000  |230501      |
|2 |  └─PX BLOCK ITERATOR|        |512000  |12189       |
|3 |    └─TABLE FULL SCAN|t1      |512000  |12189       |
=========================================================
Outputs & filters:
-------------------------------------
  0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
  1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
      dop=4

-- 设置参数为 10, 最终使用 DOP 为 6, 开启并行后基表扫描评估代价为 8 ms
set parallel_min_scan_time_threshold = 10;
=========================================================
|ID|OPERATOR             |NAME    |EST.ROWS|EST.TIME(us)|
---------------------------------------------------------
|0 |PX COORDINATOR       |        |512000  |542256      |
|1 |└─EXCHANGE OUT DISTR |:EX10000|512000  |153667      |
|2 |  └─PX BLOCK ITERATOR|        |512000  |8126        |
|3 |    └─TABLE FULL SCAN|t1      |512000  |8126        |
=========================================================
Outputs & filters:
-------------------------------------
  0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
  1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
      dop=6

```

### parallel_degree_limit

parallel_degree_limit 用于限制使用 Auto DOP 后能够使用的最大 DOP。默认值为 0，此时优化器会根据租户CPU 和系统变量 parallel_servers_target 限制最大 DOP。

**使用场景:**

AP 系统中开启 Auto DOP 后，如果出现大量需要使用较大并行度的查询，导致系统负载过高，可以通过设置 parallel_degree_limit 进一步限制允许的最大 DOP，此时根据需要将 parallel_degree_limit 设置为小于 CPU 的某个值。

系统中只有单条 AP 查询执行时，parallel_degree_limit 为默认值，查询最大只能使用 CPU 数的并行度。如果有需要在 Auto DOP 下使用更大并行度，可以将 parallel_degree_limit 设为大于 CPU 数的值，解除 CPU 数对 DOP 的限制。这种调整仅限在单条 AP 查询极致性能优化时使用，生产环境禁止使用。

**示例：**

```sql
-- 设置当前 session 使用 Auto DOP 给定的最大并行度为 8
set parallel_degree_limit = 8;

-- 设置全局使用 Auto DOP 给定的最大并行度为 8
set global parallel_degree_limit = 8;

```

## 相关文档

- 有关 Auto DOP 的更多信息，参见 [Auto DOP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001429612)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
