基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
并行查询的参数调优
更新时间:2026-04-24 14:20:02
OceanBase 数据库并行查询(PX)的参数(变量或配置项)决定了并行查询的速度,主要包括并行度和 EXCHANGE 等相关参数。
并行度变量
并行度相关变量主要决定每个查询并发时的 Worker 个数。详细信息如下表所示。
| 变量名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| parallel_servers_target | 当准备排队之前,控制检查查询要求的并行度和已统计的 Worker 总和是否超过该值。如果超过该值,则查询需要排队,否则查询继续执行。 | [0, 1800] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | 该变量主要是控制 PX 场景下,当准备进行并行查询时,如果没有足够 Worker 处理该查询,决定是否继续进行还是排队等待。 |
| _force_parallel_query_dop | 该变量在会话中指定查询 SQL 的默认并行度,在没有指定 PARALLEL Hint 情况下,查询 SQL 的并行度受此变量控制。 | [1, +∞] | 1 | 根据实际需要。例如同一个会话中要运行一批并行查询 SQL 又不想手动给每条 SQL 加上 Hint 时,建议使用此变量。 |
| _force_parallel_dml_dop | 该变量在会话中指定 DML SQL 的默认并行度,在没有指定 PARALLEL Hint 情况下,DML SQL 的并行度受此变量控制。 | [1,+∞] | 1 | 根据实际需要。例如同一个会话中要运行一批并行 DML SQL 又不想手动给每条 SQL 加上 Hint 时,建议使用此变量。 |
查看并行变量的值
您可以使用 SHOW VARIABLES 命令来查看 OceanBase 数据库中的并行变量的值。但是,请注意,某些变量是隐藏的变量,不建议进行更改。
会话变量
会话变量 _force_parallel_query_dop 和 _force_parallel_dml_dop 是隐藏变量,可以通过以下方式查询:
-- 使用 DBA_OB_SYS_VARIABLES 表查询
SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE name LIKE '%_force_parallel%';
-- 使用系统变量查询
SELECT @@_force_parallel_query_dop;
虽然这些查询方法可以返回隐藏变量的值,但请谨慎对待,不建议修改这些隐藏变量。
SYS 租户查询
如果您是 sys 租户,还可以通过以下查询命令查看这些并行变量:
SELECT tenant_id, name, value
FROM oceanbase.CDB_OB_SYS_VARIABLES
WHERE name LIKE '%_force_parallel%';
EXCHANGE(Shuffle)配置项
EXCHANGE(Shuffle)配置项主要用于控制 DFO(Distributed Function Operator)之间数据传输时的内存管理和数据重分布策略。OceanBase 数据库将这一数据传输过程封装在 DTL(Data Transfer Layer)模块中。
| 配置项名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| dtl_buffer_size | 控制 EXCHANGE 算子之间(即 Transmit 和 Receive 之间)发送数据时,每次发送数据的 Buffer 的大小。即当数据达到了该值上限才进行发送,减少每行传输的代价。 |
[4k, 2M] | 64K | PX 场景下,EXCHANGE 之间发送数据依赖于该配置项大小,一般不需要调整该配置项,如果是为了减少发送数据次数可以尝试进行修改,一般不建议修改该值大小。 |
可以通过 SHOW PARAMETERS 来查看配置项的值,如下例所示:
obclient> SHOW PARAMETERS LIKE '%dtl%';
预期返回结果:
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
| zone1 | observer | 172.xx.xxx.xxx | 2882 | dtl_buffer_size | CAPACITY | 64K | to be removed | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 64K | 1 |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
1 row in set
其他并行相关参数
| 参数名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| _enable_px_batch_rescan | 控制在 NLJ 生成分布式 PX RESCAN 计划执行时是否使用 BATCH RESCAN,可以获得更好的性能。 | True 或者 False | True | 默认开启会获得更好的性能,但会消耗更多的内存。 |
| _bloom_filter_enabled | 控制在 HASH JOIN 场景下是否开启 BLOOM FILTER。 | True 或者 False | True | 在并行度大于 1 的情况下默认开启,如果 HASH JOIN 的连接条件过滤性不佳,打开 BLOOM FILTER 会有额外的开销,在此场景可以考虑关闭此功能。 |