当前位置: 首页 > news >正文

oracle 并行度(Parallel Degree)

 在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;  -- 及时提交释放锁

http://www.dtcms.com/a/123418.html

相关文章:

  • ZYNQ笔记(二):MIO 、EMIO
  • PyTorch复现多维逻辑回归
  • AI与5G的融合:如何实现更快速、更智能的物联网应用?
  • 在docker里装rocketmq-console
  • edis 主从复制
  • 在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序
  • Python常用排序算法
  • dataset 的max_length=256是什么意思; DataLoader:shuffle=True 是什么意思
  • [LevelDB]Block系统内幕解析-元数据块(Meta Block)元数据索引块(MetaIndex Block)索引块(Index Block)
  • XHR、FetchAxios详解网络相关大片文件上传下载
  • P1331 洛谷 海战
  • uni-app 开发安卓app提交审核时因 隐私协议被拒时
  • 数据结构与算法-动态规划-区间dp,状态机dp,树形dp
  • 虚拟内存详解
  • MyBatisX插件使用
  • PointNet++语义分割(semseg)训练自己的数据集并完成可视化并保存txt结果
  • HDCP(一)
  • QML自定义属性和方法
  • 深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点
  • threeJs实现裸眼3D小狗
  • 每天记录一道Java面试题---day38
  • Python设计模式-工厂模式
  • Python设计模式-抽象工厂模式
  • 探索 C 语言数据结构:从基础到实践
  • Design Compiler:中断命令/脚本的执行
  • 【汽车产品开发项目管理——端到端的汽车产品诞生流程】
  • Mysql表的操作(2)
  • (自用)蓝桥杯准备(需要写的基础)
  • 谷歌浏览器极速安装指南
  • 前端面试题(七):什么是vuex,请解释一下它在Vue中的作用