1、什么时候使用并行?

常见的场景有:

a)

普通SQL最常见的情况就是大表的全表扫描,还有就是大的索引的快速全扫描(注意,index fast full scan可以使用并行,index full scan 不能使用并行)。

需要纠正一个误区:SQL执行慢就可以通过使用并行或是增加并行来提高速度。

    正解:并行能否发挥作用要看SQL的具体执行计划,比如标量子查询或是DB link,增大并行带来的性能提升是微乎其微的!

    多大的表算大表?

至少要百万级以上记录的表吧。如果几亿甚至十几亿记录数的表全表扫描不使用并行,SQL的执行时间会相当长,特别是表在SQL执行的过程中如果还有其他session的DML操作的时候。

OLTP系统的正常事务一般不会使用大表全扫描的执行计划,如果有一些统计分析的业务,建议在系统资源相对空闲的时候开启并行。

b)

用create table As Select创建一张大表,如

create table test parallel 16 as select .... from t1,t2 where .....;

alter table test noparallel;

c)

创建或重建索引

create index idx_test on table_A(name) parallel 8;

alter index idx_test noparallel;

d)

大表收集统计信息,可以设置并行,如degree=>8

其他不常见的操作还有表压缩等,一些比较耗时的分区操作也可以查查语法,看看是否支持并行操作。

2、并行度的选择

一般使用2的幂作为并行度,如2、4、8、16等,正常情况并行度不要设置太高,建议最多不要超过32。当然,特殊情况特殊对待,强悍的系统(比如exadata),如果需要非常高的响应速度,并行度再多个几倍也不是问题。并行高的时候并发就要减少,否则可能会耗光并行资源。

3、并行hint的写法

通常我们都会使用hint在SQL级别设置并行,一般不在表上和索引上设置并行度,所以我们上面并行创建表和索引的例子,后面都伴随着一个noparallel,如果在创建表或索引时使用了并行,要把它改成noparallel或parallel 1 :

alter table/index table_name/index_name noparallel/parallel 1;

Hint的写法在10g和11g+有很大差别,11g+就方便很多。

10g 及以下:

每个需要并行的表都要指定并行,如 /*+ parallel(a 4) parallel(b 4) */  ,如果SQL涉及的表较多,那么hint会比较长;如果内联视图较多,经常会出来遗漏的情况。如果某个表没有指定并行,那么就只能串行,如果某个大表忘了写,就会出现性能瓶颈。

11g+:

只要在整个sql的任何一个关键字(select、update、insert、delete、merge)后面出现一次parallel(n),那么整个SQL相关的表,都会使用并行,在写法上非常的简洁,而且不会遗漏。现在新开发的应用都应该是11gR2以上了,忘了10g的写法吧。

 注意:

/*+ parallel */ 或 /*+ parallel 8 */是错误的并行hint写法,这些不正确的写法会导致SQL使用一个比较大的并行度,消耗大量的系统资源。

4、并行DML

DML有4种,INSERT、DELETE、UPDATE还有MERGE,如:

insert /*+ parallel(4) */ into t1 select .... from ....;

这个写法将会在select部分使用并行度为4的并行,DML部分的并行并没有真正的启用,DML的并行默认是关闭的,如果需要使用,必须在session级别通过下面命令开启:

alter session enable parallel dml;--推荐写法

或者alter session force parallel dml parallel n; --用force的语法,可以使下面的dml即使不用parallel的hint,也会使用并行度为n的并行。

执行这个命令后,才真正开启了DML的并行。

注意:

开启了DML的并行后,接下来的DML语句将会产生一个表锁,在commit之前,当前session 不能对该表做查询和dml操作,其他session也不能对该表做DML操作。

所以建议,并行dml语句,应该在语句执行后立即commit; 然后再关闭并行dml,完整的过程应该是:

alter session enable parallel dml;

your dml;

commit;

alter session disable parallel dml;

或者alter session force parallel dml parallel 1;

补充:

parallel 的hint并不能保证sql一定会使用并行,如果优化器认为sql使用索引更高效,可能会使用索引而不使用并行。如果要确保SQL使用并行,有时可能要结合full 的hint,这种情况不多见。

关于Oracle parallel(并行)的几个基本常识相关推荐

  1. oracle parallel 并行 设置 理解

    引子:以前一直没太关注oracle并行这个特性.前几天一个兄弟碰到的一个问题,才让我觉得这个东西还是有很多需要注意的地方,有必要仔细熟悉下.其实碰到的问题不复杂: 类似如下的一条语句:insert i ...

  2. oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 ORA-12801: 并行查询 ...

  3. Oracle Parallel Execution(并行执行) .

    关于Oracle 的并行执行,Oracle 官方文档有详细的说明: Using Parallel Execution http://download.oracle.com/docs/cd/E11882 ...

  4. Oracle Parallel Execution(并行执行)

    关于Oracle 的并行执行,Oracle 官方文档有详细的说明: Using Parallel Execution http://download.oracle.com/docs/cd/E11882 ...

  5. oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 sql;"> ...

  6. oracle的并行原理

    引言:首先说明并行技术属于大数据范畴,适合OLAP系统,在任务分割.数据块分割.资源充裕的场合应用较广,本次分享主要概括并行原理.实际应用.性能对比.并行直接加载.索引属性.特点小结等六个小点去重点阐 ...

  7. Oracle Parallel Query

    Oracle Parallel Query(OPQ)可以将一个SQL statement分成多个片(chunks),然后在独自的CPU上通过多个process(子查询)进行并行运行.每个子查询同时读取 ...

  8. Oracle Parallel Query(OPQ)

    日月明王BLOG   http://sunmoonking.spaces.live.com      Oracle Parallel Query(OPQ)可以将一个SQL statement分成多个片 ...

  9. Oracle数据库的并行查询,解决Oracle数据库并行查询出错的方法

    当我们在使用Oracle数据库的时候会发现Oracle数据库并行查询出错这一问题,那么你知道如何解决Oracle数据库并行查询出错吗?下面就是解决Oracle数据库并行查询出错的方法介绍. Oracl ...

  10. Oracle Parallel使用

    Oracle Parallel使用 oracle 并行(Parallel)使用 1.查询 Sql代码   SELECT /*+ Parallel(t,8) */ * FROM emp t;   SEL ...

最新文章

  1. Kali Linux软件更新日报20190622
  2. cd-rom门锁定什么意思_CD-ROM的完整形式是什么?
  3. apache代理IIS的80端口实现共存
  4. 开源 免费 java CMS - FreeCMS1.5-数据对象-info
  5. 你一直在用的Beam Search,是否真的有效?
  6. 基于SSM的校园二手交易平台的设计与实现
  7. 18-一种准确高效的领域知识图谱构建方法
  8. java压缩图片大小不改变图片分辨率
  9. INT_MIN和INT_MAX
  10. jacob为word和excel加水印
  11. GitHub下载代理设置
  12. CHIP-seq流程学习笔记(13)-ATAC_seq 数据加工处理
  13. 天荒地老修仙功-第六部第二篇:Spring Cloud Eureka自我保护机制
  14. ZYNQ 的学习方法
  15. vue-router 路由 pushstate replacestate popstate 详解
  16. Arcgis中碎小斑块的处理
  17. 英国电信进行下一代SDN测试
  18. 在Android项目上集成Google语音(不使用手机自带引擎)
  19. uboot-uboot网络初始化分析
  20. @RequestBody

热门文章

  1. 项目管理/思维技术实战专家陈永生
  2. linux 光标切换快捷键,光标操作快捷键,光标快捷键
  3. 简要介绍DES、RSA MD5 sha1 四种加密算法的优缺点
  4. 兔子数列规律怎么讲_神奇兔子数列
  5. 表格自适应 css,css 表格自适应一些方法总结
  6. 日期(datetime)的模糊查询
  7. 阿里云大数据ACA考点总结
  8. 结婚戒指为什么要带在无名指上
  9. 我们到底在恐惧什么?
  10. 正则表达式在JS中的应用,判断邮箱是否合法