`
jayghost
  • 浏览: 430331 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle并行查询常见问题

 
阅读更多

转:http://www.cnblogs.com/daduxiong/archive/2010/08/24/1807427.html

oracle并行查询常见问题

在OLAP环境,以利用多的CPU和内存资源来加速处理数据,也即oracle的并行查询。单个CPU同一时刻只能服务一个进程,如果有多个CPU,提高CPU利用律,就可以同时运行多个进程。也就是原来单个进程处理的变成多个进程并行处理加速执行时间。并行执行只是在全表处理或者分区及在分区表中执行本地索引时用到。下面情况会用到并行查询:
全表扫描、 rebuild index、update (全表或分区表)、insert的并行子查询、本地索引使用、批量插入,象SQLLDR、创建临时表
比如我们执行
select /*+ parallel(c1 ,2) */ 
...
from customers c1
order by ...process a process b
fetch rows from fetch rows from 
customers customers
|| ||
|| ||
^^ ^^
process c process d 
sort rows(a-k) sort rows(l-z)
combine rows
||
return result set
这里我们看到这个进程分散成4个进程,排序中各负责a-k和l-z,这样就可以并行处理
我们在分区表中,也可以用一个并行从进程对应一个分区表如果你的并行度是3,那么你可能就比普通的执行速度提高3倍
注意在单CPU下,如果使用并行,那么就可能造成性能下降,而且也要设置合适的并行度
并行适合对于长时间运行的语句
在oltp可能并不适合使用并行处理,因为事务并发比较多,每个用户都要使用CPU,CPU的负载本来就比较高
所以并行处理还是比较适合olap中的批量导入,sqlldr,mis report和oltp中rebuild index。

 

1、看看并行选件是否安装
Select * FROM V$OPTION
where parameter like 'Parallel%';
看看
Parallel execution是不是TRUE

2、如果是TRUE,执行语句后查看
select * from V$pq_sesstat;
where statistic like '%Parallelized';

如果Queries Parallelized>>0就说明是执行了并行

3、可以强制使用PARALLEL,和CPU数量无关,不过在单个CPU下使用并行没有什么好处
alter session force parallel query;

4、你是怎么知道语句没有使用PARALLEL?
如果你用EXPLAIN ,那么有两个脚本看执行计划
UTLXPLS.UTLXPLP前一个是看串行计划的,后一个才能看到并行计划,
如果你使用SET AUTOTRACE,那么你如果看到P->S,那么说明计划已经是并行的了。1.与并行查询有关的参数有哪些?
parallel_adaptive_multi_user boolean 
启用或禁用一个自适应算法,旨在提高使用并行执行方式的多用户环境的性能。通过按系统负荷自
动降低请求的并行度,在启动查询时实现此功能。当 PARALLEL_AUTOMATIC_TUNING = TRUE 时,其效果最佳。 
TRUE | FALSE 如果 PARALLEL_AUTOMATIC_TUNING = TRUE,则该值为 TRUE;否则为 FALSE 
parallel_automatic_tuning boolean 
如果设置为 TRUE,Oracle 将为控制并行执行的参数确定默认值。除了设置该参数外,你还必须为
系统中的表设置并行性。 
TRUE | FALSE FALSE 
parallel_execution_message_size integer 
指定并行执行 (并行查询、PDML、并行恢复和复制) 消息的大小。如果值大于 2048 或 4096,就需
要更大的共享池。如果 PARALLEL_AUTOMATIC_TUNING =TRUE,将在大存储池之外指定消息缓冲区。 
2148 - 无穷大。 如果 PARALLEL_AUTOMATIC_TUNING 为 FALSE,通常值为 2148;如果 
PARALLEL_AUTOMATIC_TUNING 为 TRUE ,则值为 4096 (根据操作系统而定)。
parallel_max_servers integer 
指定一个例程的并行执行服务器或并行恢复进程的最大数量。如果需要,例程启动时分配的查询服
务器的数量将增加到该数量。 
0 -256 由 CPU_COUNT, PARALLEL_AUTOMATIC_TUNING 和 PARALLEL_ADAPTIVE_MULTI_USER 确定 
parallel_min_percent integer 
指定并行执行要求的线程的最小百分比。设置该参数,可以确保并行执行在没有可用的恰当查询从
属时,会显示一个错误消息,并且该查询会因此而不予执行。
parallel_min_servers integer 
指定为并行执行启动例程后,Oracle 创建的查询服务器进程的最小数量。 
0 - PARALLEL_MAX_SERVERS。
parallel_threads_per_cpu integer 
说明一个 CPU 在并行执行过程中可处理的进程或线程的数量,并优化并行自适应算法和负载均衡算
法。如果计算机在执行一个典型查询时有超负荷的迹象,应减小该数值 
任何非零值。 根据操作系统而定 (通常为 2) 

2.当前时刻有那些并行查询在跑?
14:13:46 SQL> desc v$px_session
名称 是否为空? 类型
----------------------------------------- -------- ------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
QCSID NUMBER
QCSERIAL# NUMBER
QCINST_ID NUMBER
SERVER_GROUP NUMBER
SERVER_SET NUMBER
SERVER# NUMBER
DEGREE NUMBER
REQ_DEGREE NUMBER


3.怎么才能让查询有并行执行?
如果建表时指定了并行度,例:
Create TABLE LI2.PAR_T
(
a VARCHAR2 (5)
)
PARALLEL 5;
那么对该表做全表扫描时就会并行
14:26:05 SQL> set autot on
14:26:11 SQL> select * from par_t;
未选定行
已用时间: 00: 00: 00.02
Execution Plan
----------------------------------------------------------
0 Select STATEMENT Optimizer=CHOOSE (Cost=1 Card=82 Bytes=328)
1 0 TABLE ACCESS* (FULL) OF 'PAR_T' (Cost=1 Card=82 Bytes=328) :Q6000

1 PARALLEL_TO_SERIAL Select /*+ NO_EXPAND ROWID(A1) */ A1."A" FRO
M "PAR_T" PX_GRANULE(0, BLOCK_RANGE,
如果该表没有指定并行度,可以在查询时用hint 实现,例:
select /*+ full(t) parallel(t,5) */ * from your_table t where ...;

4.为什么本该并行执行的查询没有并行执行呢?
系统的并行度由parallel_max_servers 决定,如果它的并行度为5.如果有一个并行度为5的查询在跑,那么系统在这条查询运行完成前是不能再跑并行查询的,该并行查询将会以非并行方式运行.

5如果有并行度低于系统最大并行数的查询在跑,那接下来的并行查询会怎么跑呢?
When you specify parallel degree 4 oracle tries to allocate 4 producer slaves and 4 consumer slaves. The producers can feed any of the consumers. 
If there are only 2 slaves available then we use these. 
If there is only 1 slave available then we go serial 
If there are none available then we use serial. 
If parallel_min_percent is set then we error ora 12827 instead of using a lower number of slaves or going serial

6.设定parallel_max_servers 多大为好?
在多CPU的环境中,一般把CPU-1或CPU的数量做个最大并行数,因为并行查询运行时还需要一个进程协调各并行进程.对于单CPU没什么好说的.

7.并行查询能提高系统的性能吗?
并行查询运行时,很容易会使机器运行在高负荷下,令系统对其它事务的处理时间大大加长.并行查询一般适合在非业务高峰值人工执行,并不适合在程序中指定运行并行查询.
PINNER:
并行不等于快速,仅仅是适合在数据仓库环境,低业务请求与低并发操作的时候
典型的OLTP系统,如果我们的系统,是绝对不允许并行查询出现的。 


个人倾向:
在使用Oracle Parallel Server时候,尽量设置Parallel_min_percent为非0值,原因是因为,Parallel_min_percent=0的情况下,当slaves不足时,查询会串行化的进行,这样使得了查询的速度更慢;Parallel_min_percent<>0情况下,当slaves不足时Oracle会报出错误,这样比较容易清楚我们需要的slaves不足。

 

分享到:
评论

相关推荐

    ORACLE9i_优化设计与系统调整

    §9.9.3 Oracle并行服务器 110 §9.10 Oracle数据库增长的规划 111 §9.10.1 不同增长表的配置 111 §9.10.2 对增长表进行规划和分析 112 第10章 数据库结构设计要点 113 §10.1 分析阶段的对表的理解 113 §10.2 ...

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员)

    如果你没有看到控制文件在事务等待过程中并行写入,那么看一看Oracle Apps安装过程,情况就是这样的。当前文档声称或者说分配重做日志缓冲区大小最好是1MB。Oracle在MetaLink上有一个注释,推荐Oracle Apps DBA将...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的设定 210 8.6.1 并行相关的初始化参数 210 8.6.2 并行度的设定 211 8.7 直接加载 213 8.7.1 直接加载和redo 216 8.7.2 直接加载和...

    oracle 10g 编程艺术

    涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它...

    Oracle编程艺术:深入理解数据库体系结构 第二版

    涵盖了所有重要的Oracle体系结构特性,包括文件、内存结构和进程、锁和闩、事务、并发和多版本、表和索引、数据类型、分区和并行,以及数据加载和卸载,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    8.5.1 并行查询 194 8.5.2 并行ddl操作 195 8.5.3 并行dml操作 203 8.6 并行执行的设定 210 8.6.1 并行相关的初始化参数 210 8.6.2 并行度的设定 211 8.7 直接加载 213 8.7.1 直接加载和redo 216 8.7.2 直接加载和...

    [Oracle.9i&10g;编程艺术深入数据库体系].(美)凯特.扫描版.part4.rar

    表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。 《Oracle Database...

    分布式并行数据库将在OLTP领域促进去“Oracle”

    摘要:本文全面介绍了分布式数据库和它的设计理念,以及分布式数据库的优势和应用场景,从而引出OLTP领域使用分布式数据库的考虑因素和分布式数据库取代Oracle的常见应用方案,最终大数据应用促进了“分布式架构”的...

    Oracle.9i&10g;编程艺术深入数据库体系].(美)凯特.扫描版.part1.rar

    表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。 《Oracle Database...

    Oracle Database 9i 10g 11g编程艺术 深入数据库体系结构 第2版

    本书是一本关于Oracle Database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的Oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    11.6 关于索引的常见问题和神话 472 11.6.1 视图能使用索引吗? 472 11.6.2 Null和索引能协作吗? 472 11.6.3 外键是否应该加索引? 475 11.6.4 为什么没有使用我的索引? 476 11.6.5 神话:索引中从不重用空间...

    Oracle 9i10g编程艺术

    涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和锁存,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并充分利用具体的例子来介绍每个特性,不仅讨论了各个特性是什么,还说明了...

    异步并行加载工具Asyncload.zip

    I/O目前一般的I/O的访问速度: L1 &gt; L2 &gt; memory -&gt; disk or network常见的IO:nas上文件 (共享文件存储)output/xxx (磁盘文件)memcache client / cat client (cache服务)database (oracle , mysql) (数据库)dubbo ...

    oracle数据库dba管理手册

    2.3.3 集群服务器:Oracle并行服务器 40 2.3.4 多处理器:并行查询和并行装载 选项 41 2.3.5 客户机/服务器数据库应用 42 2.3.6 三层体系结构 43 2.3.7 Oracle透明网关访问 44 2.3.8 备用数据库 44 2.3.9 复制型...

    Oracle 9i & 10g编程艺术:深入数据库体系结构

    涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和锁存,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并充分利用具体的例子来介绍每个特性,不仅讨论了各个特性是什么,还说明了...

    Oracle 编程艺术深入数据库体系结构(第2版)

    Oracle 编程艺术深入数据库体系结构(第2版)涵盖了所有重要的oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来...

    Oracle.9i&10g;编程艺术深入数据库体系 patr3

    涵盖了所有最重要的oracle体系结构特性,包括文件、内存结构和进程,锁和锁存,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并充分利用具体的例子来介绍每个特性,不仅讨论了各个特性是什么,还说明了...

    Oracle.9i&10g;编程艺术深入数据库体系 part2

    涵盖了所有最重要的oracle体系结构特性,包括文件、内存结构和进程,锁和锁存,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并充分利用具体的例子来介绍每个特性,不仅讨论了各个特性是什么,还说明了...

Global site tag (gtag.js) - Google Analytics