转: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不足。
相关推荐
Oracle数据库的并行操作特性是提高性能的关键工具,尤其对于处理大数据量和复杂查询时。...通过并行查询,可以有效地处理大规模数据,缩短查询时间,但需谨慎评估和规划,以防止资源过度消耗和潜在的性能问题。
此外,Oracle并行处理组件还能与其他关键组件如RealApplication Clusters无缝集成,提供高可用性和可伸缩性。 Oracle9i的并行处理框架还包括对并行查询的优化,能够智能地将大型查询分解为多个小任务,分配给不同的...
B树、位图、索引组织表(IOT)等都是常见的索引类型,需根据数据分布和查询模式选择合适的索引类型。 2. **EXPLAIN PLAN**:Oracle提供了EXPLAIN PLAN工具,它可以帮助分析查询的执行计划,理解数据是如何被访问的...
3. **并行查询**:利用Oracle的并行查询功能可以让多个进程同时执行查询的不同部分,以此来加快查询速度。 4. **SQL提示**:在SQL语句中添加提示可以帮助优化器选择更好的执行计划,从而提高查询性能。 #### 四、...
本文将深入探讨Oracle数据库并行查询出错的常见原因及解决策略。 首先,我们来看一下错误描述。当出现`ORA-12801: 并行查询服务器P007中发出错误信号`和`ORA-01722:无效数字`这两个错误时,意味着在并行查询过程中...
### Oracle常见问题1000题精粹:深入解析与实战技巧 #### 一、Oracle基本操作命令详解 **1. INSERT 命令** 在Oracle数据库中,`INSERT`命令用于向表中插入新的记录。例如,使用`/*+append*/`提示,可以将数据直接...
并行技术允许Oracle数据库并行地执行多个操作来加速数据处理过程。 1.1.4 分开设计与优化:OLTP和OLAP系统设计与优化的重点不同。在设计时,OLTP系统关注于事务的快速处理,而OLAP系统则更注重于分析能力与查询性能...
在Oracle并行服务(OPS)或实时应用集群(RAC)环境下,文章提供了全面的故障排除指南,涵盖了从紧急情况下的状态备份到OPS设计、配置准则,以及常见的OPS问题分析步骤。这对于在复杂集群环境中运行Oracle数据库的组织尤...
Oracle 常见故障解决方法 Oracle 是一种关系型数据库管理系统,广泛应用于各种行业和领域。然而,在使用 Oracle 过程中,...这些故障解决方法可以帮助用户快速解决 Oracle 中常见的问题,提高系统的稳定性和性能。
1. **性能优化**:Oracle数据库性能问题是常见的挑战,包括慢查询、CPU占用过高和I/O瓶颈等。可以通过调整SQL语句、创建索引、优化表结构、合理分配系统资源以及使用Oracle的性能分析工具如AWR(Automatic Workload ...
在Oracle数据库中,并行执行是提高处理大量...理解并行执行的基础概念、发展演进、适用场景以及常见问题,对于优化Oracle数据库性能至关重要。通过深入学习和实践,DBA可以更好地利用这些特性,提升系统的整体性能。
### Oracle 数据导入导出及常见问题 Oracle 数据库作为企业级数据库管理系统的首选之一,在日常运维工作中,数据的导入导出是一项非常重要的操作。本文将详细介绍如何在 Oracle 中进行数据的导入导出,并针对常见的...
三、并行查询常见问题 并行查询是Oracle提供的一种优化大表查询的方法,通过将任务分解成多个子任务并行处理,从而提高处理速度。 1. **并行查询概念**:当查询涉及大量数据时,系统可以将查询任务分配给多个进程...
以下是一些Oracle常见问题及其详细解答: 1. **安装与配置问题**: - **问题1**: Oracle安装失败或启动不了。 - 解决方法:检查系统环境是否满足Oracle的硬件和软件需求,如内存、磁盘空间、操作系统版本等。确保...
在Oracle数据库在Unix环境下运行时,常常会遇到一些常见但容易引发问题的情况。本文旨在通过作者的实际工作经验,总结并分享这些易错点,帮助读者避免重蹈覆辙,提升对Oracle和Unix的理解。 1. **并行度设置** - *...
根据提供的文件信息,可以看出这是一份关于Oracle数据库常见问题解答的手册或文档的一部分。文档包含了多个与Oracle数据库管理和操作相关的具体问题及解答示例。接下来,我们将对文档中提到的关键知识点进行详细的...
8. **并行查询与并行执行**:并行查询可以加速大数据量的处理,但同时也可能带来资源竞争问题。书中会讲解如何判断是否适合使用并行查询,以及如何设置并行度。 9. **数据库监控与诊断**:利用AWR (Automatic ...
Oracle数据库在Unix操作系统环境下运行时,会遇到许多常见的问题,这些问题往往源于对Oracle特性和Unix命令的误解。本文主要探讨了Oracle的一些易错点,尤其是关于并行度的使用。 并行度是Oracle数据库中一个重要的...
首先,文中提到的一个常见问题是AIX系统中1GB和10GB混装网卡导致的网络接口重启。这种问题会影响到Oracle RAC的心跳监测,因为RAC依赖于稳定的网络连接来检测各个节点的状态。解决方案是将AIX操作系统升级到修复了该...
这个等待事件并不涉及并行查询或DML,而是在数据库恢复期间,Oracle并行读取数据文件中的数据块以进行恢复操作。它记录了操作涉及的文件数量、数据块数和I/O请求次数。 优化Oracle数据库性能的关键在于理解和分析...