oracle 并行度(Parallel Degree)

发布于:2025-04-11 ⋅ 阅读:(47) ⋅ 点赞:(0)

 在Oracle数据库中,并行度(Parallel Degree) 是用于控制并行处理任务的关键配置,旨在通过多进程协作加速大规模数据处

一、并行度的核心概念

并行度(DOP, Degree of Parallelism) 表示一个操作同时使用的并行进程数。适用于:

  • 查询(SELECT):全表扫描、JOIN操作、聚合计算。

  • DML操作:批量插入、更新、删除。

  • DDL操作:创建索引、表重建、数据泵导入导出

 

二、并行度的配置方式

1. 对象级别并行度

  • 表/索引默认并行度

-- 设置表的并行度
ALTER TABLE tmp_01 PARALLEL 8;

-- 查看表并行度
SELECT table_name, degree FROM user_tables WHERE table_name = upper('tmp_01');

-- 移除并行度
ALTER TABLE t_prem_arap_tmp_01 NOPARALLEL;

2. 操作级别并行度(Hints)

在SQL中指定

SELECT /*+ PARALLEL(e, 8) */ * FROM employees e;

3. 实例级别参数

关键参数

SHOW PARAMETER parallel_max_servers;  -- 最大并行进程数
SHOW PARAMETER parallel_servers_target;  -- 系统自动分配的并行进程目标
SHOW PARAMETER parallel_threads_per_cpu; -- 每个CPU的并行线程数(默认为2)

 三、并行度的执行机制

1. 并行进程分配

  • 生产者(QC, Query Coordinator):协调并行任务,分配工作单元。

  • 消费者(PX Servers):执行实际任务的并行进程。

  • 进程数计算
    实际进程数 = DOP × 2(例如,DOP=4 时,需要8个进程)。

2. 数据分片(Granule)

  • 块范围分片:按数据块范围分配任务(全表扫描)。

  • 分区级分片:按分区分配任务(分区表更高效)。

四、并行度的优化策略

1. 自动并行度(Auto DOP, Oracle 12c+)

 ALTER SYSTEM SET parallel_degree_policy = AUTO;

根据对象大小、系统负载和资源动态调整DOP。

2. 手动调优建议

  • CPU资源:DOP不超过CPU核心数 × parallel_threads_per_cpu

  • 数据量

    • 小表(< 1GB):DOP=1(禁用并行)。

    • 大表(> 10GB):DOP=4~16(根据硬件调整)

3. 避免资源争用

监控并行进程

SELECT sid, serial#, qcsid, qcserial#, degree, req_degree 
FROM v$px_session 
WHERE qcsid IS NOT NULL;
  • sid: 并行服务器进程的会话ID

  • qcsid: 协调进程(Query Coordinator)的会话ID

  • degree: 实际使用的并行度

  • req_degree: 请求的并行度

调整参数

限制并行进程数以防资源耗尽:

ALTER SYSTEM SET parallel_max_servers = 160;  -- 根据总内存和CPU调整

五、并行度的应用场景

场景 推荐配置 示例
数据仓库查询 高DOP(8~16) 大规模聚合、星型查询
批量数据加载 中高DOP(4~8) SQLLoader、INSERT /+ APPEND */
OLTP系统 禁用或低DOP(1~2) 高并发事务,避免资源争用
索引创建 DOP=CPU核心数 CREATE INDEX ... PARALLEL 8;

六、常见问题与解决方案

 1. 并行执行效率低

  • 原因:资源争用(CPU、I/O)、数据倾斜。

解决

  • 监控 V$SQL_MONITOR 查看执行瓶颈。

  • 使用分区表减少数据倾斜。

2. 并行进程无法启动

  • 原因parallel_max_servers 不足或参数配置错误。

ALTER SYSTEM SET parallel_max_servers = 200;  -- 增加并行进程上限

 3. 锁冲突

ALTER SESSION ENABLE PARALLEL DML;  -- 启用并行DML
COMMIT;  -- 及时提交释放锁