GaussDB 集中式数据库中指定表并行处
在华为GaussDB 集中式数据库-GaussDB 100,面向集中式部署场景 中,支持通过表级并行度控制或查询 Hint(提示) 实现 “仅对 SQL 中指定表开启并行处理”,核心思路是通过精细化配置表的并行属性或强制查询计划对目标表启用并行,同时让其他表沿用默认串行或低并行策略。
一、核心实现原理:表级并行度的可控性
GaussDB 集中式的并行查询机制遵循 “全局参数为基础,表级配置 / Hint 为优先” 的规则:
-
全局参数(如
enable_parallel_execute
)控制是否允许并行查询(默认开启),但仅决定 “是否支持并行”,不指定 “哪些表并行”; -
表级配置(存储参数
PARALLEL
)或查询 Hint(如/*+ PARALLEL(表名, 并行度) */
)可单独指定某张表的并行处理策略,优先级高于全局参数,从而实现 “指定表单独并行”。
二、具体实现方案(针对示例 SQL)
示例 SQL 为两表关联查询:select * from t1, t2 where ``t1.id`` = ``t2.id
,需仅对t2
表开启并行,t1
表保持串行。以下是两种常用方案:
方案 1:通过 “表级存储参数” 长期配置(适合固定需求)
通过CREATE TABLE
或ALTER TABLE
为t2
表设置并行度(DOP,Degree of Parallelism),使该表的所有查询默认启用并行;t1
表不设置并行参数,沿用全局默认(串行或低并行)。
操作步骤:
-
确认全局并行开关已开启
首先确保数据库允许并行查询(默认开启),可通过以下 SQL 验证:
SELECT name, value FROM SYS.V\$PARAMETER WHERE name = 'enable\_parallel\_execute';
\-- 若value为1,表示开启;若为0,需执行以下语句开启(需管理员权限):
ALTER SYSTEM SET enable\_parallel\_execute = 1 SCOPE = SPFILE;
\-- 重启数据库使配置生效(仅修改SPFILE时需重启)
- 为 t2 表设置并行度
- 新建 t2 表时直接指定并行度(推荐):
CREATE TABLE t2 (
  id INT,
  col1 VARCHAR2(50),
  ... -- 其他字段
) 
PARALLEL 4; -- 并行度设为4(根据CPU核心数调整,通常为CPU核心数的1-2倍)
- 已存在的 t2 表,通过 ALTER TABLE 修改并行度:
ALTER TABLE t2 PARALLEL 4; -- 对t2表启用并行,并行度4
ALTER TABLE t1 PARALLEL 1; -- 强制t1表串行(并行度1等效于关闭并行)
-
执行目标 SQL
无需修改 SQL,数据库会自动对
t2
启用并行(按表级配置的并行度),t1
按并行度 1 串行处理:
select \* from t1, t2 where t1.id = t2.id;
方案 2:通过 “查询 Hint” 临时控制(适合动态需求)
若仅需对某一次查询中的t2
表启用并行(不影响其他查询),可使用 GaussDB 支持的PARALLEL
查询 Hint,直接在 SQL 中指定t2
的并行度,优先级最高。
操作语法与示例:
Hint 格式:/*+ PARALLEL(表名, 并行度) */
- 对
t2
表启用并行度 4,t1
表不指定(默认串行):
SELECT /\*+ PARALLEL(t2, 4) \*/ -- 强制t2表并行处理,并行度4
  \* 
FROM t1, t2 
WHERE t1.id = t2.id;
- (可选)若需明确强制
t1
串行,可增加t1
的串行 Hint:
SELECT /\*+ PARALLEL(t2, 4) PARALLEL(t1, 1) \*/ -- t2并行,t1串行
  \* 
FROM t1, t2 
WHERE t1.id = t2.id;
三、关键配置说明与注意事项
1. 并行度(DOP)的合理设置
并行度并非越高越好,需结合服务器 CPU 核心数、内存大小及业务负载调整:
-
推荐值:
并行度 = CPU物理核心数 × 1~2
(例如 8 核 CPU,并行度设为 8 或 16); -
避免过度并行:若并行度过高,会导致线程切换开销增大,反而降低性能(尤其小表查询,并行收益可能覆盖不了开销)。
2. 表级并行与全局参数的优先级
GaussDB 并行策略的优先级从高到低为:
查询Hint > 表级PARALLEL参数 > 全局并行参数(如parallel_degree_limit)
- 若全局参数
parallel_degree_limit
设置了最大并行度(如 16),则表级或 Hint 指定的并行度不能超过该值。
3. 验证并行是否生效
可通过查看执行计划确认t2
表是否启用并行,执行以下 SQL:
EXPLAIN FORMAT=TEXT
SELECT /\*+ PARALLEL(t2, 4) \*/ \* FROM t1, t2 WHERE t1.id = t2.id;
-
若执行计划中包含
PARALLEL SCAN ON t2
(并行扫描 t2 表),且degree: 4
,说明并行已生效; -
t1
表的扫描计划若为SCAN ON t1
(无 PARALLEL 关键字),说明为串行。
四、总结一下下
-
能否实现:GaussDB 集中式(GaussDB 100)完全支持 “仅对指定表开启并行”,核心通过表级 PARALLEL 参数(长期配置)或查询 Hint(临时配置)实现。
-
推荐方案:
-
长期固定需求:用
ALTER TABLE t2 PARALLEL 4;
配置表级并行; -
临时动态需求:在 SQL 中加
/*+ PARALLEL(t2, 4) */
Hint,灵活且不影响其他查询。
- 核心逻辑:通过精细化控制单表的并行度,让目标表(t2)通过多线程加速扫描 / 关联,其他表(t1)保持串行,兼顾性能与资源利用率。
- 点赞
- 收藏
- 关注作者
评论(0)