问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle aq队列 能实现并行吗?创建两个队列也不能实现

发布网友 发布时间:2022-04-10 11:48

我来回答

2个回答

懂视网 时间:2022-04-10 16:09

并行执行与串行执行相比,能否缩短执行时间,取决于如下几个方面:
1、待执行的目标SQL是否适合并行执行,有些SQL是不太适合并行执行的,比如走索引的嵌套循环连接。
2、数据库服务器上的硬件资源(如CPU、内存、I/O等)是否还有富余。
3、并行执行时,是否最大化地利用了数据库服务器上的硬件资源(但同时又不能使数据库服务器上的硬件资源消耗殆尽)。
4、待执行的目标SQL的并行执行计划是否为当前情形下的最优执行计划。

oracle中并行执行不一定比串行执行快

标签:执行   服务   最大化   合并   目标   最优   数据库   合并行   并行   

热心网友 时间:2022-04-10 13:17

并行概念

并行执行(parallel execution)是Oracle企业版才有的特性(标准版中没有这个特性),指能够将一个大型串行任务(任何DML,或者一般的DDL)物理地划分为多个较小的部分,这些较小的部分可以同时得到处理。

并行包括:

并行查询:这是指能使用多个操作系统进程或线程来执行一个查询。Oracle会发现能并行执行的操作(如全表扫描或大规模排序),并创建一个查询计划来实现)。
并行DML(PDML):这在本质上与并行查询很相似,但是PDML主要是使用并行处理来执行修改(INSERT、UPDATE、DELETE和MERGE)。
并行DDL:并行DDL是指Oracle能并行地执行大规模的DDL操作。例如,索引重建、创建一个新索引、数据加载以及大表的重组等都可以使用并行处理。
并行恢复:这是指数据库能并行地执行实例(甚至介质)恢复,以减少从故障恢复所需的时间。
过程并行化:这是指能并行地运行所开发的代码。

何时使用并行

在应用并行执行之前,需要保证以下两点成立:

必须有一个非常大的任务,如对50GB数据进行全面扫描。
必须有足够的可用资源(CPU、I/O、内存)。在并行全面扫描50GB数据之前,你要确保有足够的空闲CPU(以容纳并行进程),还要有足够的I/O通道。

如果只有一个小任务(通常OLTP系统中执行的查询就是这种典型的小任务),或者你的可用资源不足(这也是OLTP系统中很典型的情况),其中CPU和I/O资源通常已经得到最大限度的使用,那就根本不用考虑并行执行。

如果一个任务只需要几秒(或更短时间)就能串行地完成,引入并行执行后,相关的管理开销可能会让整个过程花费更长的时间。

举例如,写一页文档若12个人来写,需要开会分段等,可能并不如一个人来写更快。而如果写1200页,12个人写需要的时间只为原来的1/12,就算分配任务可能也就1/12,还是比一个人写要快多了。

并行查询

并行查询允许将一个SQL SELECT语句划分为多个较小的查询,每个部分的查询并发地运行,然后会将各个部分的结果组合起来,提供最终的答案。

在并行进程和扫描文件之间并不存在1对1映射,可以多个进程扫描同一个文件。

各个并行进程可称为并行执行服务器(parallel execution server),有时也称为并行查询(parallel
query,PQ)从属进程。各个并行执行服务器都是单独的会话,就像是专业服务器进程一样连接数据库。每个并行执行服务器分别负责扫描表中一个部分(各
个部分都不重叠),汇总其结果子集,将其输出发回给协调服务器(即原始会话的服务器进程),它再将这些子结果汇总为最终答案。

在默认情况下,Oracle是不启用并行查询的。启用并行查询有多种方法,可以直接在查询中使用一个提示,或者修改表要求考虑并行执行路径等。

【并行查询方法】

1)暗示hints式,临时有效

select /*+parallel(table_name num)*/ count(*) from table_name;

多表关联时多表并行:

select /*+parallel(table_name1,num1) parallel(table_name2,num2)*/ count(*) from table_name1, table_name2;

2)alter table对象式,长期有效

alter table table_name parallel num;

3)alter session会话式,会话生命周期有效

alter session force parallel query parallel num;

4)并行DDL式,会话生命周期有效

alter session enable parallel dml;

对于前两种方式,若省略num则Oracle将自动根据负载确定并行度。并行度要随着系统上工作负载的增减而变化。如果有充足的空闲资源,并行度会
上升;如果可用资源有限,并行度则会下降。这样就不会为机器强加一个固定的并行度。利用这种方法,允许Oracle动态地增加或减少查询所需的并发资源
量。

【查看默认并行数】

1)确定会话SID

select sid from v$mystat where rownum = 1;

2)在其他会话中查询

select sid,qcsid,server#,degree from v$px_session where qcsid = num;

一般而言,如果能访问尽可能多的资源(CPU、内存和I/O),并行执行就能最好地发挥作用。但这并不是说如果整个数据集都在一个磁盘上,就从并行
查询得不到任何好处。不过如果整个数据集都在一个磁盘上,可能确实不如使用多个磁盘那样能有更多收获。即使使用一个磁盘,在响应时间上也可能可以得到一定
的速度提升。原因在于:给定的一个并行执行服务器在统计行时并不读取这些行,反之亦然。所以,与执行串行相比,两个并行执行服务器可以在更短的时间内完成
所有行的统计。

数据分布在多个物理设备上可以提高I/O,如表分区、跨磁盘等。

在Oracle 11g Release2及以上版本中,引入了一项新功能来*资源过度使用:并行语句排除(Parallel
Statement
Queuing,PSQ)。使用PSQ时,数据库会*并发执行的并行查询数,并把更多的并行请求放在一个执行队列中。CPU资源用尽时数据库会阻止新的
请求变为活动状态。这些请求并没有失败,它们只是会延迟开始,也就是说它们将排队。资源可用时,数据库就会开始执行队列中的查询。

并行DML

Oracle文档将并行DML(PDML)一词的范围*为只包括INSERT、UPDATE、DELETE和MERGE(不像平常的DML那样还
包括SELECT)。在PDML期间,Oracle可以使用多个并行执行服务器来执行INSERT、UPDATE、DELETE或MERGE,而不是只利
用一个串行进程。在一个有充足I/O带宽的多CPU主机上,对于大规模的DML操作,可能会得到很大的速度提升。

不过,不能把PDML当成提高OLTP应用速度的一个特性。因为并行操作设计为要充分、完全地利用一台机器上的所有资源。通过这种设计,一个用户可
以完全使用机器上的所有磁盘、CPU和内存。在某些数据仓库中(有大量数据,而用户很少),这可能正是你想要的。而在一个OLTP系统中(大量用户都在做
很短、很快的事务),可能就不能希望如此了,你不想让用户能够完全占用机器资源。

类似于Oracle执行的分布式查询,PDML操作采用同样的方式执行,即每个并行执行服务器相当于一个单独数据库实例中的一个进程。这些事务都结束后,会执行一个相当于快速2PC的过程来提交这些单独的独立事务。这些事务要么都由PDML协调会话提交,要么无一提交。

由于PDML采用的一种伪分布式的实现,因此存在一些*:

PDML操作期间不支持触发器。这是一个很合理的*,因为触发器可能会向更新增加大量开销,而你使用PDML的本来目的是为了更快一些,这两方面是矛盾的,不能放在一起。
PDML期间,不支持某些声明方式的引用完整性约束,因为表中的每一片(部分)会在单独的会话中作为单独的事务进行修改。例如,PDML操作不支持自引用完整性。如果真的支持自引用完整性,可能会出现死锁和其他锁定问题。
在提交或回滚之前,不能访问用PDML修改的表。
PDML不支持高级复制(因为复制特性的实现要基于触发器)。
不支持延迟约束(也就是说,采用延迟模式的约束)。
如果表是分区的,PDML只可能在有位图索引或LOB列的表上执行,而且并行度取决于分区数。在这种情况下,无法在分区内并行执行一个操作,因为每个分区只有一个并行执行服务器来处理。
执行PDML时不支持分布式事务。
PDML不支持聚簇表。

并行DDL

从维护的观点看,以及从管理的角度来说,并行DDL才是Oracle中并行执行最突出的优点。如果认为并行查询主要是为最终用户设计的,那么并行
DDL则是为DBA/开发人员设计的。如果没有并行执行,DBA将很难真正充分利用硬件的全部能力。但如果利用并行执行,则完全可以做到。以下SQL
DDL命令允许“并行化”:

CREATE INDEX:多个并行执行服务器可以扫描表、对数据排序,并把有序的段写出到索引结构。
CREATE TABLE AS SELECT:执行SELECT的查询可以使用并行查询来执行,表加载本身可以并行完成。
ALTER INDEX REBUILD:索引结构可以并行重建。
ALTER TABLE MOVE:表可以并行移动。
ALTER TABLE SPLIT|COALESCE PARTITION:单个表分区可以并行地分解或合并。
ALTER INDEX SPLIT PARTITION:索引分区可以并行地分解。

前4个命令还适用于单个的表/索引分区,也就是说,可以并行地MOVE一个表的单个分区。

并行DDL和使用外部表的数据加载

利用并行DDL,再加上外部表,就能通过一个简单的CREATE TABLE AS SELECT or INSERT /*+ APPEND
*/来实现并行直接路径加载。不用再编写脚本,不必再分解文件,也不用协调要运行的N个脚本。简单地说,通过结合并行DDL和外部表,不仅提供了纯粹的易
用性,而且全无性能损失。

并行DDL和区段截断

并行DDL依赖于直接路径操作。也就是说,数据不传递到缓冲区缓存以便以后写出;而是由一个操作(如CREATE TABLE AS
SELECT)来创建新的区段,并直接写入这些区段,数据直接从查询写到磁盘(放在这些新分配的区段中)。每个并行执行服务器执行自己的部分CREATE
TABLE AS SELECT工作,并且都会写至自己的区段。INSERT /*+ APPEND
*/(直接路径插入)会在一个段的HWM“之上“写,每个并行执行服务器再写至其自己的一组区段,而不会与其他并行执行服务器共享。因此,如果执行一个并
行CREATE TABLE AS
SELECT,并使用4个并行执行服务器来创建表,就至少有4个分区,可能还会更多。每个并行执行服务器会分配其自己的区段,向其写入,等填满时,再分配
另一个新的区段,并行执行服务器不会使用由其他并行执行服务器非品牌的区段。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我想下个好点的股市行情软件,光大证券金阳光app怎么样啊? 股票行情软件下载选哪个比较好?光大证券的金阳光app怎么样? 光大证券开户APP是什么 光大用什么炒股软件 家里房顶漏水怎么办 房顶漏水最好补漏方法 中石化薪资揭秘(天津、海南、镇海、中科、茂名) 专科生在茂名石化待遇怎样 茂名石化正式工待遇怎么样 茂名石化待遇如何 729-08胶皮是内能的吗 - 信息提示 M5,M7.5,M10水泥砂浆配比,以及计算方法???谢谢 m7.5砂浆配合比(水泥是325.沙子是细沙)用来砌墙 75号砂浆如何配 m75水泥沙浆的配比 求助:英语高手请帮忙翻译一篇歌词吧,谢谢! 求一首歌 歌词有一段是“我很快乐,请不要再说爱我。” 我很快乐,请你不要再说爱我... 如果你是爱我的,就不要让自己再犯错。 歌词是,我很快乐,是什么歌,, 《我很快乐,请不要假装爱我》是哪首歌的歌词? 有一首歌的歌词是我很快乐,情不要说你爱我。叫什么名 有首歌我不知道叫什么,但歌词里有出现“我很快乐,请不要再说爱我....."歌名叫什么? 谁知道<第三者的第三者>的歌词 "我很快乐,请不要再说爱我"是什么歌了啊? 张惠妹的歌里有句我很快乐,是什么歌 我很快乐,请别再说爱我,是那一首歌的歌词? 问首歌名 歌词是 我很快乐 请不要再说爱我 是什么歌 谁知道第三者的第三者歌词是什么啊 ‘我很快乐、请别再说爱我、悲伤剧情太多…’这是哪首歌的歌词阿? 歌词我很快乐,不要再说爱我是什么歌 有个男的总管我叫母狗,说话还总带脏字的,这是为什么 仓鼠浴室可以当厕所吗? 仓鼠浴室问题 仓鼠 笼、窝、浴室、厕所都放哪些东西呢? 仓鼠的浴室是放在笼子里让它自己洗,还是把仓鼠抓出来洗澡? 仓鼠的浴盆可以一直放在笼子里吗? 如何培养鼠鼠分清厕所和浴室? 请问仓鼠的浴室和厕所能用同一个吗? 没有浴沙的情况下要怎么给仓鼠洗澡? 我家的仓鼠把浴室当窝了没问题吗 仓鼠笼里,到底放置浴室好还是厕所好... 仓鼠的厕所和浴室是一个地方么,还是要分开阿,刚刚养的,有很多都不会。 自制仓鼠浴室 如何把微信好友头像及隐藏起来 如何把微信好友的头像及隐藏起来? 梦见手指段了自己烧火引起爆炸 白色皮衣粘到颜料要怎么洗 皮毛一体皮衣蹭上了点颜料怎么清洗 寻求图片能转换TIF格式的绿色无毒无木马图片转换器! 手指触电 然后过几天像被火烧