oracle并行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle并行相关的知识,希望对你有一定的参考价值。

并行和并发的区别

1. 并发(Concurrency)

一心多用,同时执行通常不相关的各种任务

2. 并行(Parallelism)

并行兵分几路程序是用来解决一个单一任务的,将一个任务分为多段处理。

 

数据库的并行

将一个工作分成多个块,有不同的进程同时处理,处理完成后做数据汇总。

 用户建立连接   -》

数据库启动server process -》

当并发请求发起查询请求时,当前的process 变为协调进程,并创建多个子进程,让子进程处理数据-》

子进程处理数据结束后将结果-》

返回给协调进程。

 

并行度的设置,需要模拟业务操作,并测试才能得到最有效的并行度设置。

 

 

 

并行度

parallel(c,2) :并行度为2, 代表每个step 的并行度为2

有查询是并行度为2;

当有排序时,排序也有并行度

当有排序时,会继续使用查询时的进程

 

执行计划参数特殊表述: 

PX  COORDINATOR : 并发协调器

PX BLOCK ITERATOR: 并发块的迭代,将任务分成多个子任务

PX SEND RANGE : 发送执行下一步

PX RECEIVE : 协调器接收执行结果

PX SEND QC :发送给协调器

 

IN-OUT 

P->P 两组并行的线程发数据

P->S 并行往串行发数据

S->P 串行往并行发数据

PCWP 在相同并行进程里完成(父进程)

PCWC 在相同并发现场里完成(子进程)

 

获取数据库sql的并行度

select * from v$px_sessoin.degree  动态的结果

select * from v$pq_sqstat 

 

并行初始化参数:

PARALLEL_ADAPTIVE_MULTI_USER 根据用户数决定并系数,默认为开启防止并大太大对系统产生影响

PARALLEL_MAX_SERVERS :最大启动的并行数,不能超过该值

PARALLEL_MINE_SERVERS: 用途是告诉Oracle需要在启动实例时就启动多少个并行进程并保留在内存中,目的是为了每次查询创建进程的时间。

ARALLEL_AUTOMATIC_TUNING:自动调整是否并行,并行度等,默认为关闭

 

11g

PARALLEL_DEGREE_LIMIT : 并行度设置的限制

PARALLEL_DEGREE_POLICY:并行策略

      11g之前在表上设置并行度,则执行的sql会根据设置的并行度,使用并行,该参数可以自动调整并行度

      manual(dufault):不需要自动调整

       limited:表或索引有固定值,则还是用设置的并行度,当使用默认并行度时,则oracle会自动调整。

       auto:所有的并行都自动调整。

PARALLEL_FORCE_LOCAL:rac 下当前实例下执行

PARALLEL_MIN_TIME_THRESHOLD: 并行时间执行超过该时间就不在执行

PARALLEL_SERVERS_TARGET:   尽可能并行数在target之间设置并行数, 类似PARALLEL_MAX_SERVERS

PARALLEL_EXECUTION_MESSAGE_SIZE:并行进程发送数据的大小

 

 

并行度的设置

1. 设置session状态(Alter session force parallel query)

例如:

Alter session force parallel query parallel 8;

Alter session force parallel DML parallel n;

2. 设置表的并行度(Alter table tab1 parallel n)

Alter table qz_hdsj_fk  parallel 8 ;

create index idx_qz_hdsj_fk on qz_hdsj_fk(sjclzt) tablespace  TS_GS_SBF_DATA  parallel 4;

alter index GS_SBF.IDX_QZ_HDSJ_SJYXQ_SJCLZT noparallel;(取消并行度)

3. 使用hint设置并行度

UPDATE /*+ PARALLEL(tab1,4) */ qz_hdsj_fkSET c1=c1+1;

INSERT /*+ PARALLEL(tbl_ins,2) */ INTO qz_hdsj_fk

SELECT /*+ PARALLEL(tbl_sel,4) */ * FROM qz_hdsj_fk;

DELETE /*+ PARALLEL (t1, 2) */ FROM qz_hdsj_fk

 

并行度优先级:

Hint > session > object

如果没有设置将执行默认并行度

 

create index idx_qz_hdsj_fk on qz_hdsj_fk(sjclzt) tablespace  TS_GS_SBF_DATA  parallel 4;

 

11R2在RAC环境下优化 IN-MEMORY PARALLEL EXECUTION

在执行并行操作之前,将数据分块并在不同的节点处理各自块的数据,在节点间减少通讯。

 

以上是关于oracle并行的主要内容,如果未能解决你的问题,请参考以下文章

oracle 建索引怎么开启并行?

oracle收集统计信息无法开并行

Oracle“并行执行”之二——并行执行类型

oracle 并行模式(parallel)

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

深入理解Oracle的并行操作-转载