达梦数据库的并行设置生效与查看
达梦数据库的并行设置生效与查看首先,使用 PARALLEL_POLICY 参数来设置并行策略。取值范围: 0、 1 和 2,默认值0。其中, 0 表示不支持并行; 1 表示自动并行模式; 2 表示手动并行模式。当开启本地并行(PARALLEL_POLICY>0)时,使用 PARALLEL_THRD_NUM 指定本地并行查询使用的线程数,取值范围为 1~1024,缺省值为 10。需要注意...
并行查询是数据库处理大规模数据集的关键性能优化技术。本文详细介绍达梦数据库的并行设置方法、查看并行执行情况及实际应用案例,帮助您充分利用多核处理能力提升查询性能。
1. 并行查询参数配置
达梦数据库的并行查询主要通过以下几个关键参数控制:
1.1 PARALLEL_POLICY - 并行策略设置
-- 查看当前并行策略设置
SELECT para_name, para_value, para_type
FROM v$dm_ini
WHERE para_name = 'PARALLEL_POLICY';
参数值含义:
0: 不支持并行(默认值)
1: 自动并行模式
2: 手动并行模式
1.2 PARALLEL_THRD_NUM - 并行线程数
当开启本地并行(PARALLEL_POLICY>0)时,使用PARALLEL_THRD_NUM指定本地并行查询使用的线程数,取值范围为1~1024,默认值为10。
需要注意的是,若PARALLEL_POLICY=1,且PARALLEL_THRD_NUM=1,则系统会根据CPU核心数自动设置并行线程数。
1.3 MAX_PARALLEL_DEGREE - 最大并行度
使用自动并行模式时,需要设置MAX_PARALLEL_DEGREE参数,同时确保PARALLEL_POLICY=1。不过从实际应用经验来看,一般建议避免使用自动并行,手工设置并行更适合大多数场景。
2. 查看当前并行相关配置
SELECT para_name, para_value, para_type
FROM v$dm_ini
WHERE para_name LIKE '%PARA%';
执行结果:
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ------------------------------ ---------- ---------
1 BATCH_PARAM_OPT 0 IN FILE
2 CLT_CONST_TO_PARAM 0 IN FILE
3 HAGR_PARALLEL_OPT_FLAG 0 SESSION
4 MAX_PARALLEL_DEGREE 1 SESSION
5 PARALLEL_POLICY 0 IN FILE
6 PARALLEL_THRD_NUM 10 IN FILE
7 PARALLEL_MODE_COMMON_DEGREE 1 SESSION
8 HFINS_PARALLEL_FLAG 0 SYS
9 SEC_INDEX_PARALLEL_INSERT_FLAG 0 SYS
10 RLOG_PARALLEL_ENABLE 0 IN FILE
11 PARALLEL_PURGE_FLAG 0 IN FILE
12 AP_PARALLEL_DEGREE 10 IN FILE
3. 修改并行配置方法
3.1 通过dm.ini文件修改(实例级)
编辑达梦数据库配置文件dm.ini,设置PARALLEL_POLICY参数值:
PARALLEL_POLICY = 2 # 设置为手动并行模式
PARALLEL_THRD_NUM = 10 # 设置并行线程数为10
修改完成后需要重启数据库服务使配置生效:
dm.ini配置修改
3.2 会话级修改
– 修改当前会话的并行策略为手动模式
SET PARALLEL_POLICY = 2;
– 设置当前会话的并行线程数
SET PARALLEL_THRD_NUM = 8;
4. 使用并行查询与执行计划分析
4.1 通过SQL HINT指定并行度
– 使用PARALLEL提示指定并行度为4
SELECT /*+ PARALLEL(4) / DEPARTMENT_ID, COUNT()
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
4.2 比较执行计划
带并行的执行计划:
SQL> EXPLAIN SELECT /*+PARALLEL(4)*/ DEPARTMENT_ID, COUNT(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID;
1 #NSET2: [1, 1, 30]
2 #PRJT2: [1, 1, 30]; exp_num(2), is_atom(FALSE)
3 #HAGR2: [1, 1, 30]; grp_num(1), sfun_num(1);
4 #LOCAL COLLECT: [1, 1, 30]; op_id(1) n_grp_by (0) n_cols(0) n_keys(0) for_sync(FALSE)
5 #HAGR2: [1, 1, 30]; grp_num(1), sfun_num(1);
6 #CSCN2: [0, 3, 30]; INDEX33555497(EMPLOYEES)
不带并行的执行计划:
SQL> EXPLAIN SELECT DEPARTMENT_ID, COUNT(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID;
1 #NSET2: [1, 1, 30]
2 #PRJT2: [1, 1, 30]; exp_num(2), is_atom(FALSE)
3 #HAGR2: [1, 1, 30]; grp_num(1), sfun_num(1);
4 #CSCN2: [0, 3, 30]; INDEX33555497(EMPLOYEES)
执行计划分析:观察带并行的执行计划中出现了#LOCAL COLLECT操作符,这是并行执行的明显标志。此操作符负责协调各并行线程并收集结果,是达梦数据库并行处理机制的核心组件。
5. 并行查询适用场景
5.1 适合并行的查询类型
大表全表扫描:对包含百万级以上记录的表执行全表扫描
复杂聚合操作:包含GROUP BY、聚合函数的复杂查询
多表连接:涉及多个大表的复杂连接操作
大量数据排序:需要对大量数据进行ORDER BY操作
5.2 不适合并行的查询类型
小表查询:数据量小于10万行的表通常不需要并行
高选择性索引查询:通过高效索引只访问少量数据的查询
OLTP事务处理:频繁的小批量事务操作
单行查询:通过主键或唯一索引获取单行数据
6. 并行度设置与性能优化
6.1 并行度设置原则
小型服务器(4核以下):并行度 = CPU核心数
中型服务器(4-16核):并行度 = CPU核心数 × 0.75
大型服务器(16核以上):并行度 = CPU核心数 × 0.5
6.2 性能优化实例
聚合查询示例(500万行数据表):
-- 不使用并行:执行时间15秒
SELECT region, product_category, SUM(sales_amount)
FROM sales_data
GROUP BY region, product_category;
-- 使用并行:执行时间2.5秒
SELECT /*+ PARALLEL(8) */ region, product_category, SUM(sales_amount)
FROM sales_data
GROUP BY region, product_category;
性能提升:6倍
6.3 最佳实践
选择适当的并行模式:手动并行模式(PARALLEL_POLICY=2)通常比自动并行更可控
合理设置并行度:根据系统资源和查询特性设置合适的并行度
适用场景识别:针对适合并行的查询类型有选择地应用并行技术
结合其他优化技术:并行查询与表分区、索引优化等技术结合使用效果更佳
常见问题排查:当并行设置未生效时,检查PARALLEL_POLICY参数设置和执行计划
达梦数据库的并行查询功能是提升大数据量处理性能的有力工具。通过合理配置并行参数和正确使用并行语法,可以充分发挥多核硬件优势,显著提升查询执行效率。
公众号:收获不止数据库
更多推荐




所有评论(0)