oracle的并行查询
并行查询 满足下面条件:
有多个CPU
数据分离在多个磁盘上
通常用在OLAP环境,以利用多的CPU和内存资源来加速处理数据。因为单个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
可以通过sar -u看cpu使用情况
----------------
检查一下
1、看看并行选件是否安装
SELECT * FROM V$OPTION
看看
Parallel execution是不是TRUE
2、如果是TRUE,执行语句后查看
select * from V$pq_sesstat;
如果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并行查询优化 #### 一、引言 在Oracle数据库系统中,并行查询(Parallel Query, PQ)是一项强大的特性,它通过将查询任务分解为多个子任务并行执行来提升性能。然而,并行查询并非总是能带来性能提升,...
Oracle并行查询(OPQ)是Oracle数据库系统中一项强大的特性,它利用现代硬件的多处理器能力,显著提升大规模数据操作的效率。随着硬件的进步,尤其是对称多处理(SMP)服务器的普及,Oracle从Oracle8i版本开始在各个...
Oracle并行查询(OPQ)是Oracle数据库系统中一种强大的特性,旨在利用多CPU系统的能力,提高查询性能和响应时间。随着硬件的发展,服务器经常配备8个、16个甚至32个CPU,Oracle数据库也相应地实现了并行性功能。自...
Oracle并行查询是Oracle数据库系统中的一个重要特性,它允许数据库以多线程或多进程的方式执行复杂的SQL查询,从而充分利用多核CPU的计算能力,显著提高数据处理速度。在大规模数据仓库和高性能计算环境中,这种并行...
Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1、错误描述 ORA-12801: 并行查询服务器P007中发出错误信号 ORA-01722:无效...
### Oracle并行执行详解 #### 一、引言 在现代数据库系统中,为了提高查询性能,Oracle数据库引入了并行执行技术。该技术通过利用多处理器或多核心的优势,将复杂的查询任务分解成多个子任务并行处理,从而显著...
Oracle并行处理是Oracle企业版提供的一项强大功能,它允许将SQL语句的处理任务分配给多个处理器或处理器核心以及多个磁盘设备,从而充分利用现代多核处理器和分布式存储系统的能力。在多核架构和多磁盘设备环境下,...
### Oracle并行SQL指南 #### 一、理解并行SQL的概念 在Oracle数据库中,并行SQL(Parallel SQL)是一种能够显著提升SQL语句执行效率的技术。传统的串行SQL执行方式中,一个会话只能利用一个CPU核心或者一个磁盘...
### 在双机集群环境下Oracle并行服务的实现分析 #### 概述 随着信息技术的不断发展,企业对于数据处理能力和系统稳定性的要求越来越高。传统的单机架构已经难以满足这种需求,因此,集群技术应运而生。本文主要探讨...
### Oracle并行执行基础 #### 并行执行概念 并行执行是数据库处理技术中的一个核心组成部分,尤其在处理大规模数据集时尤为重要。通过利用多个处理器或进程来完成单一任务,能够显著提升查询效率和整体性能。对于...
并行查询是指将一个 SQL Select 语句分解成多个较小的查询,每个部分的查询并发地运行,然后将各个部分的结果组合起来,提供最终的结果。并行查询通常用于全表扫描、索引全扫描、大表的扫描和连接、创建大的索引、...
并行处理就是利用多个CPU和I/O资源来执行单个数据库操作。尽管现在每个主要的数据库供应商都声称可以提供并行处理能力,但每个供应商所提供的体系结构...本文还讲述Oracle并行处理组件与其它关键业务组件的无缝集成。
并行查询选件是Oracle并行处理的另一个重要方面,它优化了复杂的SQL查询。在并行查询中,大型的SELECT语句会被分解为多个小任务,分配给多个处理器或服务器节点执行。这些节点同时工作,各自处理部分数据,然后将...
Oracle并行度主要分为以下几类: 1. **并行查询(Parallel Query)**:并行查询将大型SQL SELECT语句分割成多个子查询,这些子查询同时执行,然后合并结果。这在全表扫描、索引全扫描、大表连接、创建大索引、分区...
四、Oracle并行查询 并行查询(Parallel Query)是Oracle的重要特性,它将大的SELECT操作分割成小的子任务,由多个并行服务器进程执行。在测试中,我们需要考虑如何平衡查询的并行度、I/O负载、网络通信等因素,以...
除了并行查询,Oracle还支持其他类型的并行操作,如并行DML(Parallel DML),用于加速插入、更新和删除操作;并行DDL(Parallel DDL),用于快速创建大表或重建索引;并行恢复(Parallel Recovery),在数据库恢复...
【SQL Server和Oracle并行处理比较分析】 在数据库系统中,数据一致性是核心问题之一,尤其是在高并发的环境中。SQL Server和Oracle作为两大主流的关系型数据库管理系统,它们各自采用了独特的并行处理策略来应对这...
### ORACLE数据库优化之SQL语句的并行处理 #### SQL语句并行处理的重要性与优势 在现代信息系统的高效...通过细致的规划和优化,可以最大化地发挥Oracle数据库的并行处理能力,为用户提供更加快速、稳定的查询体验。
"ORACLE并行技术在计费账务系统中的应用探讨" ORACLE并行技术是当前数据库技术发展的热点之一,它可以大大提高数据库的处理能力和可扩展性。在计费账务系统中,ORACLE并行技术的应用可以极大地提高系统的性能和可靠...