`

Oracle Parallel

 
阅读更多

背景:在系统中,有2个4核心的CPU,那么一共8个逻辑CPU。每当ORACLE进行查询时,就会产生一个session,对于oracle 每个session占用一个CPU。当整个系统只有一个人在用的时候,剩下7个CPU,是空闲状态。那么就可以用parallel语句合理利用起来剩下7个CPU。

注意:当系统有很多用户连接时,开启parallel不是一个明确的选择。

1.  用途

强行启用并行度来执行当前SQL。这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会多核同时工作,来提高效率。

但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记录数大于100万时使用,效果也会比较明显。

 

2.

启用Parallel前的忠告:只有在需要处理一个很大的任务,如需要几十分钟,几个小时的作业中,并且要有足够的系统资源的情况下(这些资源包括cpu,内存,io),您才应该考虑使用parallel。否则,在一个多并发用户下,系统本身资源负担已经很大的情况下,启用parallel,将会导致某一个会话试图占用了所有的资源,其他会话不得不去等待,从而导致系统系能反而下降的情况,一般情况下,oltp系统不要使用parallel,oltp系统中可以考虑去使用。

 

Parallel分类

a)并行查询parallel query

b)并行dml parallel dml pdml

c)并行ddl parallel ddl pddl

 

A)并行查询:

开启并行查询就是对于某个TABLE

 

 

SQL>alter table TABLE_NAME parallel8

将对于TABLE_NAME 这个表的查询改为8

 

SQL>select/*+ parallel(t1 8) */ count(*)from t1;
只对于本次SQL有效
//测试不好用,没有加快

 

SQL>alter table t1 noparallel
取消并行设置
B)并行dml

并行dml包括insert,update,delete,merge,在pdml期间,oracle可以使用多个并行执行服务器来执行insert,update,delete,merge,多个会话同时执行,同时每个会话(并发进程)都有自己的undo段,都是独立的一个事务,这些事务要么由pdml协调器进程提交,要么都rollback。

在一个有充足I/o带宽的多cpu主机中,对于大规模的dml,速度可能会有很大的提升,尤其是在大型的数据仓库环境中。

并行需要:

 

 

 

SQL> alter session enable parallel dml;开启

SQL> alter session disable parallel dml;关闭

//测试不好用

 

 

详细讲解(没看太懂):

一、并行(Parallel)和OLAP系统

并行的实现机制是:首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(比如表的数据块)分割成很多部分,称为并行处理单元,然后并行协调进程给每个并行进程分配一个数据单元。比如有四个并行服务进程,他们就会同时处理各自分配的单元,当一个并行服务进程处理完毕后,协调进程就会给它们分配另外的单元,如此反复,直到表上的数据都处理完毕,最后协调进程负责将每个小的集合合并为一个大集合作为最终的执行结果,返回给用户。

并行处理的机制实际上就是把一个要扫描的数据集分成很多小数据集,Oracle 会启动几个并行服务进程同时处理这些小数据集,最后将这些结果汇总,作为最终的处理结果返回给用户。

这种数据并行处理方式在OLAP系统中非常有用,OLAP系统的表通常来说都是非常大,如果系统的CPU比较多,让所有的CPU共同来处理这些数据,效果就会比串行执行要高得多。

然而对于OLTP系统,通常来讲,并行并不合适,原因是OLTP系统上几乎在所有的SQL操作中,数据访问路径基本上以索引访问为主,并且返回结果集非常小,这样的SQL操作的处理速度一般非常快,不需要启用并行。

二、并行处理的机制

当Oracle数据库启动的时候,实例会根据初始化参数:
 PARALLEL_MIN_SERVERS=n
的值来预先分配n个并行服务进程,当一条SQL被CBO判断为需要并行执行时发出SQL的会话进程变成并行协助进程,它按照并行执行度的值来分配进程服务器进程。

首先协调进程会使用ORACLE启动时根据参数: parallel_min_servers=n的值启动相应的并行服务进程,如果启动的并行服务器进程数不足以满足并行度要求的并行服务进程数,则并行协调进程将额外启动并行服务进程以提供更多的并行服务进程来满足执行的需求。然后并行协调进程将要处理的对象划分成小数据片,分给并行服务进程处理;并行服务进程处理完毕后将结果发送给并行协调进程,然后由并行协调进程将处理结果汇总并发送给用户。

刚才讲述的是一个并行处理的基本流程。实际上,在一个并行执行的过程中,还存在着并行服务进程之间的通信问题。

在一个并行服务进程需要做两件事情的时候,它会再启用一个进程来配合当前的进程完成一个工作,比如这样的一条SQL语句:

Select * from employees order by last_name;

假设employees表中last_name 列上没有索引,并且并行度为4,此时并行协调进程会分配4个并行服务进程对表employees进行全表扫描操作,因为需要对结果集进行排序,所以并行协调进程会额外启用4个并行服务进程,用于处理4个进程传送过来的数据,这新启用的用户处理传递过来数据的进程称为父进程,用户传出数据(最初的4个并行服务进程)成为子进程,这样整个并行处理过程就启用了8个并行服务进程。 其中每个单独的并行服务进程的行为叫作并行的内部操作,而并行服务进程之间的数据交流叫做并行的交互操作。

这也是有时我们发现并行服务进程数量是并行度的2倍,就是因为启动了并行服务父进程操作的缘故。

 

五、并行执行的使用范围

Oracle的并行技术在下面的场景中可以使用:

(1)Parallel Query(并行查询)

(2)Parallel DDL(并行DDL操作,如建表,建索引等)

(3)Parallel DML(并行DML操作,如insert,update,delete等)

5.1 并行查询

并行查询可以在查询语句,子查询语句中使用,但是不可以使用在一个远程引用的对象上(如DBLINK)。

一个查询能够并行执行,需要满足一下条件:

(1)SQL语句中有Hint提示,比如Parallel 或者 Parallel_index.

(2)SQL语句中引用的对象被设置了并行属性。

(3)多表关联中,至少有一个表执行全表扫描(Full table scan)或者跨分区的Index range SCAN。

如:select /*+parallel(t 4)×/ * from t;

5.2 并行DDL 操作

5.2.1 表操作的并行执行

以下表操作可以使用并行执行:

CREATE TABLE … AS SELECT

ALTER TABLE … move partition

Alter table … split partition

Alter table … coalesce partition

DDL操作,我们可以通过trace 文件来查看它的执行过程。

示例:
查看当前的trace 文件:

/* Formatted on 2010/8/31 23:33:00 (QP5 v5.115.810.9015) */

SELECT      u_dump.VALUE

         || '/'

         || db_name.VALUE

         || '_ora_'

         || v$process.spid

         || NVL2 (v$process.traceid, '_' || v$process.traceid, NULL)

         || '.trc'

            "Trace File"

  FROM            v$parameter u_dump

               CROSS JOIN

                  v$parameter db_name

            CROSS JOIN

               v$process

         JOIN

            v$session

         ON v$process.addr = v$session.paddr

 WHERE       u_dump.name = 'user_dump_dest'

         AND db_name.name = 'db_name'

         AND v$session.audsid = SYS_CONTEXT ('userenv', 'sessionid');

 

Trace File

------------------------------------------------------------------------------

d:\app\administrator\diag\rdbms\orcl\orcl\trace/orcl_ora_5836.trc

d:\app\administrator\diag\rdbms\orcl\orcl\trace/orcl_ora_3048.trc


SQL> alter session set events '10046 trace name context forever,level 12';

会话已更改。

SQL> create table test parallel 4 as select * from dba_objects;

表已创建。

SQL> alter session set events '10046 trace name context off' ;

会话已更改。


这里用到了ORACLE的event 时间。 10046事件是用来跟踪SQL语句的。开启事件后,相关的信息会写道trace 文件中,这也是之前我们查看trace 文件名的原因。

有了trace文件, 我们可以用tkprof 工具,来查看trace 文件的内容。

 

关于tkprof 工具介绍,参考blog:

  使用 Tkprof 分析 ORACLE 跟踪文件

 http://blog.csdn.net/tianlesoftware/archive/2010/05/29/5632003.aspx

 

进入trace 目录,用tkprof命令生成txt 文件,然后查看txt 文件。

d:\app\Administrator\diag\rdbms\orcl\orcl\trace>tkprof orcl_ora_3048.trc test.txt sys=no

TKPROF: Release 11.2.0.1.0 - Development on 星期二 8月 31 23:45:25 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

d:\app\Administrator\diag\rdbms\orcl\orcl\trace>


5.2.2 创建索引的并行执行

创建索引时使用并行方式在系统资源充足的时候会使性能得到很大的提高,特别是在OLAP系统上对一些很大的表创建索引时更是如此。 以下的创建和更改索引的操作都可以使用并行:

Create index

Alter index … rebuild

Alter index … rebuild partition

Alter index … split partition
 
一个简单的语法:create index t_ind on t(id) parallel 4;
 
监控这个过程和5.2.1 中表一样,需要通过10046事件。 这里就不多说了。

 

有关减少创建时间方法,参考blog:

   如何加快建 index 索引 的时间

  http://blog.csdn.net/tianlesoftware/archive/2010/07/11/5664019.aspx


总结:

使用并行方式,不论是创建表,修改表,创建索引,重建索引,他们的机制都是一样的,那就是Oracle 给每个并行服务进程分配一块空间,每个进程在自己的空间里处理数据,最后将处理完毕的数据汇总,完成SQL的操作。

5.3 并行DML 操作

Oracle 可以对DML操作使用并行执行,但是有很多限制。 如果我们要让DML 操作使用并行执行,必须显示地在会话里执行如下命令:

SQL> alter session enable parallel dml;

会话已更改。

只有执行了这个操作,Oracle 才会对之后符合并行条件的DML操作并行执行,如果没有这个设定,即使SQL中指定了并行执行,Oracle也会忽略它。

5.3.1 delete,update和merge 操作

Oracle 对Delete,update,merge的操作限制在,只有操作的对象是分区表示,Oracle 才会启动并行操作。原因在于,对于分区表,Oracle 会对每个分区启用一个并行服务进程同时进行数据处理,这对于非分区表来说是没有意义的。


5.3.2 Insert 的并行操作

实际上只有对于insert into … select … 这样的SQL语句启用并行才有意义。 对于insert into .. values… 并行没有意义,因为这条语句本身就是一个单条记录的操作。

Insert 并行常用的语法是:

 Insert /*+parallel(t 2) */ into t select /*+parallel(t1 2) */ * from t1;

 这条SQL 语句中,可以让两个操作insert 和select 分别使用并行,这两个并行是相互独立,互补干涉的,也可以单独使用其中的一个并行。

分享到:
评论

相关推荐

    Oracle Parallel 并行处理

    标题:Oracle Parallel 并行处理 描述:在Oracle数据库中,通过并行处理技术,一个SQL语句可以被多个线程或进程同时处理,从而显著提升执行效率。 ### Oracle并行处理技术概述 Oracle并行处理是Oracle企业版提供的...

    oracle的Parallel_并行技术案例详解

    Oracle 的 Parallel 并行技术案例详解 Oracle 的 Parallel 并行技术是指在数据库系统中实现并行处理的技术,通过将一个大的任务分解成多个小的任务,并利用多个进程或线程来并发执行这些小任务,从而提高系统的处理...

    oracle parallel SQL

    在 Oracle 中,可以通过一些提示(hint)来控制并行执行,如使用“parallel”提示来指定查询并行执行时应该使用的线程数。同时,还有一些数据库配置参数可以控制并行操作的各个方面,比如系统级别的并行处理的限制,...

    Oracle8i Parallel Server Administration, Deployment, and Perform

    Oracle8i Parallel Server是Oracle数据库的一个重要特性,它在8.1.6版本中得到了进一步的优化和增强,旨在提供高可用性和高性能的解决方案。Oracle Parallel Server允许多个进程同时访问和处理数据库,以提高系统...

    oracle字典表 深入了解Oracle数据字典

    从Oracle 8版本开始,引入了GV$视图,其含义为Global V$,主要用于OPS(Oracle Parallel Server)环境。在OPS环境中,查询GV$视图可以获得所有实例的信息;而V$视图则基于GV$视图加上了一个条件`where inst_id = ...

    ORACLE数据库备份技术的原理及实现

    Oracle还提供了多种其他高可用性解决方案,如Oracle Fail Safe on NT、Oracle Parallel Server、Oracle Parallel Fail Safe、Oracle Advanced Queuing和Oracle Advanced Replication等。这些工具和特性旨在增强...

    Oracle9idba fundamentals 1

    Oracle的工具和产品名称中如Developer/2000、Designer/2000、Oracle Enterprise Manager、Oracle Parallel Server和PL/SQL,分别是Oracle提供的开发工具、管理工具和编程语言。这些产品和工具为数据库的开发、维护和...

    Oracle 项目管理

    Oracle、Oracle Designer、Oracle Developer、SQL*Plus、SQL*Loader、SQL*Net、CASE*Method、Oracle Parallel Server、PL/SQL、Pro*C、SQL*Module等均为Oracle Corporation的注册商标,体现了Oracle公司在信息技术...

    ORACLE Standby数据库工作原理及程序设计.pdf

    Oracle提供了一系列高可用性产品,包括Oracle FailSafe on NT、Oracle Parallel Server、Oracle Parallel FailSafe、Oracle Advanced Queuing、Oracle Advanced Replication、Oracle Standby Database等,而Standby...

    ORACLE 8.0.5在AIX上的安装

    对于在HACMP集群上运行的Oracle Parallel Server,硬件要求包括IBM HACMP/6000集群,由1到8个节点组成,以及对应的HACMP软件版本。特别注意的是,你需要解决HACMP启动时可能遇到的inittab条目缺失的问题,这可能需要...

    Oracle_Parallel.rar_oracle

    本压缩包“Oracle_Parallel.rar_oracle”包含了两份关于Oracle SQL并行处理的重要资料:“Oracle_Parallel_SQL并行处理1_深入原理介绍.pdf”和“Oracle_Parallel_SQL并行处理2_执行计划分析与问题跟踪.pdf”。...

    深入了解Oracle数据字典

    自Oracle 8开始,GV$视图被引入,主要用于支持Oracle Real Application Clusters (RAC)环境,即OPS(Oracle Parallel Server)的前身。GV$视图提供全局视角,能够显示所有实例的信息,而V$视图则针对单个实例。每个V...

    oracle数据库课件:第一章 Oracle简介.ppt

    并行数据库系统在Oracle中表现为Oracle Parallel Server (OPS),它在并行计算技术的支持下,允许多个实例同时访问同一个数据库,提高处理效率。自Oracle8i开始,几乎所有的数据库操作都支持并行性,包括SQL查询、...

    ORACLE 动态性能视图详解

    在OPS(Oracle Parallel Server)环境中,`GV$`视图可以用来查询OPS_ADMIN_GROUP参数定义的实例组信息,但需要满足`PARALLEL_MAX_SERVERS`参数大于零,并且OPS_ADMIN_GROUP参数至少有一个成员。 访问动态性能视图...

    Oracle RAC数据库架构分析与实战攻略

    - **Oracle Parallel Server (8i) / Real Application Cluster (9i/10g)**:用于实现多实例集群环境下的数据库共享访问,旨在提高可用性和扩展性。 - **Oracle Standby Database (8i) / Oracle DataGuard (9i/10g)**...

    Oracle平台和电子商务.pptx

    Oracle Parallel Server是一个高可用性的服务器系统,能够提供任何时间开放业务,容错设计,透明的恢复,不需停机维护。 Oracle Internet Directory是一个基于internet标准的安全系统,能够提供强制端到端的安全...

    Oracle容灾复制解决方案

    4. **广泛的异构环境支持**:SharePlex支持多种操作系统、Oracle版本以及Oracle Real Application Clusters (RAC) 和Oracle Parallel Server (OPS)。它还支持跨版本和平台的数据互操作性,包括BLOB、CLOB、LONG RAW...

Global site tag (gtag.js) - Google Analytics