`

oracle parallel execution example

阅读更多

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

类似如下的一条语句:insert into xxxx select /*+parallel(a) */ * from xxx a;数据量大约在75G左右,这位兄弟从上午跑到下午还没跑完,过来问我咋回事,说平常2hrs能跑完的东西跑了好几个小时还撒动静。查看系统性能也比较 正常,cpu,io都不繁忙,平均READ速度在80M/s左右(勉强凑合),但平均写速度只有10M不到。等待事件里面大量的‘PX Deq Credit : send blkd ’,这里能看出并行出了问题,从而最后得知是并行用法有问题,修改之后 20分钟完成了该操作。正确的做法应该是:
alter session enable dml parallel;

insert /*+parallel(xxxx,4) */ into xxxx select /*+parallel(a) */ * from xxx a;

因为oracle默认并不会打开PDML,对DML语句必须手工启用。 另外不得不说的是,并行不是一个可扩展的特性,只有在数据仓库或作为DBA等少数人的工具在批量数据操作时利于充分利用资源,而在OLTP环境下使用并行 需要非常谨慎。事实上PDML还是有比较多的限制的,例如不支持触发器,引用约束,高级复制和分布式事务等特性,同时也会带来额外的空间占用,PDDL同 样是如此。有关Parallel excution可参考官方文档 ,在Thomas Kyte的新书《Expert Oracle Database architecture》也有精辟的讲述。

 
 
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
 
我在其中一个SESSION 执行
SQL> create table test3 parallel 4 as select * from test1;

表已创建。

SQL> select * from v$mystat where  rownum=1;

       SID STATISTIC#      VALUE
---------- ---------- ----------
       151          0          1

SQL>


然 后立刻在另一SESSION 乘上一个执行没结束,看下面,这么说是有4个并行的进程在处理了
SQL> select * from v$px_session;


SADDR           SID    SERIAL#      QCSID  QCSERIAL#  QCINST_ID SERVER_GROUP SERVER_SET    SERVER#     DEGREE REQ_DEGREE
-------- ---------- ---------- ---------- ---------- ---------- ------------ ---------- ---------- ---------- ----------
6D31E434        131         16        151        107          1            1          1          1       4             4
6D32421C        136         11        151        107          1            1          1          2       4             4
6D3267AC        138         18        151        107          1            1          1          3       4             4
6D31F6FC        132         11        151        107          1            1          1          4       4             4
6D335BD4        151        107        151

SQL> select * from v$mystat where rownum=1;

       SID STATISTIC#      VALUE
---------- ---------- ----------
       137          0          1

SQL>




我 加大后

SQL> /

SADDR           SID    SERIAL#      QCSID  QCSERIAL#  QCINST_ID SERVER_GROUP SERVER_SET    SERVER#     DEGREE REQ_DEGREE
-------- ---------- ---------- ---------- ---------- ---------- ------------ ---------- ---------- ---------- ----------
6D31864C        126         10        151        107          1            1          1          1       7            10
6D31F6FC        132         17        151        107          1            1          1          2       7            10
6D32421C        136         15        151        107          1            1          1          3       7            10
6D3267AC        138         22        151        107          1            1          1          4       7            10
6D322F54        135         11        151        107          1            1          1          5       7            10
6D31E434        131         18        151        107          1            1          1          6       7            10
6D327A74        139          5        151        107          1            1          1          7       7            10
6D335BD4        151        107        151

已选择 8行。

SQL>

奇怪,怎么看只有7个,我那里可是写成
SQL> create table test4 parallel 10 as select * from test1;

表已创建。


怎么少了3 个?


不过我实际只有一个CPU的机器,这些说明什么问题呢?

BTW

SQL> SHOW Parameter parallel_max

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- -------------------
parallel_max_servers                 integer                20
SQL>
 
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
开多少个parallel server也要看当时系统的负载,并行是很耗系统资源的,
 

这个并行度和你初始化参数有关。CPU_COUNT 、PARALLEL_THREADS_PER_CPU 等等都有关系。如果你建表的时候没有明确指定并行度,那么oracle会自动的根据需要设定并行度。

分享到:
评论
1 楼 Oo慢慢来oO 2010-09-10  
alter session enable dml parallel;
这个命令是错的
正确的应该是:
alter session enable parallel dml ;

相关推荐

    Oracle Parallel 并行处理

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

    oracle的Parallel_并行技术案例详解

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

    oracle parallel SQL

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

    Parallel execution 并行查询的性能测试

    - **数据库版本**:Oracle 11.2.0.1 - **内存目标**:1.6GB 这些硬件与软件配置共同决定了测试的基础条件。 #### 什么是并行执行 并行执行是一种通过多CPU和I/O资源来加速单个数据库操作的技术。其主要目的是通过...

    Oracle_Parallel.rar_oracle

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

    Oracle Parallel SQL

    ### Oracle Parallel SQL详解 #### 一、并行SQL概念与优势 **并行SQL**(Parallel SQL)是一种在Oracle数据库中提高SQL语句执行效率的技术。通过并行处理,一个SQL语句可以在多个线程或进程中同时执行,充分利用...

    Parallel Execution Framework-开源

    旨在允许快速设置功能强大的基于NOW的群集,以运行计算密集型应用程序。 不必专门为使这些集群受益而设计应用程序。

    Oracle8i Parallel Server Administration, Deployment, and Perform

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

    Oracle8i Parallel Server Concepts Release 2 (8.1.6)

    Oracle8i Parallel Server Concepts Release 2 (8.1.6) 本资源概述Oracle8i Parallel Server Concepts Release 2 (8.1.6),它是Oracle Corporation于1999年12月发布的一份技术文档。该文档详细介绍了Oracle8i ...

    PARALLEL THREAD EXECUTION ISA

    标题 "PARALLEL THREAD EXECUTION ISA" 指的是并行线程执行指令集架构,ISA 通常用于描述硬件如何执行机器代码指令。本文件为 "PTX CUDA ISA",意味着该文档是关于NVIDIA CUDA(统一计算设备架构)并行线程执行ISA的...

    Oracle SQL Tuning with Oracle SQLTXPLAIN: Oracle Database 12c Edition

    This new edition has been expanded to include AWR, Oracle 12c Statistics, interpretation of SQL Monitor reports, Parallel execution, and Exadata-related features. Reading this book and using SQL ...

    Oracle 官方数据仓库资料

    Oracle 官方数据仓库指南,讲解透彻,知识权威,强烈推荐! Oracle® Database Data Warehousing Guide 10g Release 2 (10.2) Contents: Part I Concepts 1 Data Warehousing Concepts...25 Using Parallel Execution

    Oracle8i Parallel Server Administrator’s Guide Release 2 (8.1.6)

    《Oracle8i Parallel Server Administrator’s Guide Release 2 (8.1.6) for Windows NT》是Oracle公司为Windows NT平台发布的关于Oracle8i并行服务器管理的指南,旨在帮助管理员有效地管理和优化Oracle数据库在...

    async-parallel-example:async.js 的并行方法调用 Web 服务的示例

    在这个“async-parallel-example”中,我们将关注并行方法,它允许我们在不影响主线程的情况下同时运行多个异步任务。这对于处理I/O密集型操作(如Web服务调用)特别有用,因为这些操作通常不会阻塞CPU。 要开始...

    Oracle RAC核心技术详解

    SQL语句可以在集群的不同实例间分配,通过SQL Parallel Execution和Database Res源管理策略,自动将工作负载分散到多个CPU上,提高系统性能。RAC还支持透明应用故障转移(TAF),当某个实例出现故障时,会自动将连接...

    Expert Oracle Database Architecture 9i and 10g programming Techniques and Solutions

    Oracle has a really neat feature called parallel execution. The Oracle documentation tells you how to use this feature and what it does. Oracle documentation does not, however, tell you when you ...

    Oracle并行执行

    2. **并行服务器进程(Parallel Execution Server, PES)**:这些进程是由Oracle实例创建的,用于执行并行查询中的各个子任务。每个PES进程可以独立地处理数据,并将结果汇总到协调器进程。 3. **并行协调器进程...

    ORACLE 10G入门与实践

    Oracle 10G也提升了并发处理能力,通过并行执行(Parallel Execution)特性,可以将大查询任务分解为多个子任务并行处理,显著缩短执行时间。此外,它的数据分区(Partitioning)功能允许大型表被分割成更小、更易...

Global site tag (gtag.js) - Google Analytics