暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

解读执行计划十二

原创 由迪 2020-08-11
1456

并行查询操作
此类操作中包含了所有与并行查询相关的操作。
关键词释义
并行查询:并行查询是通过将查询操作任务分成若干个子任务,交由多个并行服务进程(或线程)
执行,以提高处理速度的方法。
并行度(Degree Of Parallelism,DOP):与单个操作关联的并行服务进程数即为并行度。并行度可以通过在创建对象的 DDL 语句指定,也可以通过语句中的提示指定。

通常,采用并行查询的目的是减少查询响应时间,而非降低传统性能指标(如 IO、CPU)为度量标准(相反,这些数据可能会比串行执行情况下更高)。
提示:参数 parallel_max_servers 控制最大并行服务进程数,parallel_min_servers 控制最小并行服务进程数,parallel_max_servers 为 1 则禁用并行查询。
o PX COORDINATOR
并行执行协调者,亦为查询协调者(Query Coordinator,QC)。在并行查询语句的执行计划中, PX COORDINATOR 是执行并行操作的第一步。示例参见下例。
在并行执行过程中,并行执行协调者是一个独立的会话(即用户会话本身),负责对并行语句的初始化,并且将可并行操作分解,按照一定策略将分解后的子任务分发给并行服务会话。此外, 它还承担一部分无法并行操作的任务。
o PX SEND QC (RANDOM)
并行服务进程通过表队列(Table Queue)将数据随机发送给协调者。
关键词释义
表队列(Table Queue,TQ):表队列是协调者与并行服务进程之间、并行进程相互之间的数据传
输通道。执行计划中的 TQ 字段显示了当前操作中进程之间通讯所用的表队列信息。

image.png

o PX SEND QC (ORDER)
并行服务进程通过表队列(Table Queue)将数据按序发送给协调者。示例参见下例。
o PX RECEIVE
消费者(Consumer)通过表队列(Table Queue)接收从生产者(Producer)发送过来的数据。示例参见下例。

关键词释义

生产者(Producer)/消费者(Consumer)模式:为了提高数据处理效率,并行进程被分成进程集。
成对协同工作:一组负责”生产“数据行,称为生产者(Producer);另一组则”消费“这些数据行,称为”消费者“。例如,在进行关联(JOIN)查询时,一组进程集从一张表中读取数据,并通过表队列通道(Table Queue)发送数据,这组进程集就是生产者;另外一组进程集则从队列通道中接收数据,并将数据与从另外一张表的数据进行关联,这组进程集就是消费者。

在生产者/消费者模式下,实际需要的并行服务进程数量是指定并行度(DOP)的两倍。 除了对单个表的简单查询外,大多数并行执行语句都会运行在生产者/消费者模式下
o PX SEND (RANGE)
生产者(Producer)依照数据范围将数据不同分发给不同消费者(Consumer)。

关键词释义
数据分发(Distribution):
在并行查询中,每一个生产者进程都只会获取相互之间不重叠的一部分数据,而消费者在执行某些 操作(如关联)时,需要从多个生产者获取数据,生产者就需要按照一定方式将数据分发给需要其 数据的消费者。执行计划中,PQ Distrib 字段表示分发方式。
在并行查询中,同一个操作可能会有多个进程同时进行,因此,在执行计划中需要描述父子操 作之间关系,字段 IN-OUT 就是显示该信息。并行操作之间关系包括:
• 并行致串行(Parallel to Serial,P->S):多个进程同时执行的并行操作向单个进程执行的串行操作发送数据,其数据的发送、接收需要通过表队列(Table Queue)完成。如并行服务进程向协调者发送数据。
• 并行致并行(Parallel to Parallel,P->P):多个进程同时执行的并行操作向多个进程同时执行的并行操作发送数据,其数据的发送、接收需要通过表队列(Table Queue)完成。如多个生产者进程向多个消费者进程分发数据。
• 并行致串行(Serial to Parallel,S->P):单个进程执行的串行操作向多个进程同时执行的并行操作发送数据,其数据的发送、接收需要通过表队列(Table Queue)完成。如某些情况下,并行进程的并发操作的子操作无法并行执行,或者子操作的对象太小,并行化代价大于串行代价。
• 与父操作捆绑进行的并行操作(Parallel Combined With Parent,PCWP):父子操作都是并行操作,但必须由同一进程完成。
• 与子操作捆绑进行的并行操作(Parallel Combined With Child,PCWC):父子操作都是并行操作,但必须由同一进程完成。
image.png

o PX SEND (BROADCAST)
生产者(Producer)将数据广播分发给所有消费者(Consumer)。
image.png
image.png

o PX SEND (BROADCAST LOCAL)
生产者(Producer)将数据广播分发给所有操作于同一分区的消费者(Consumer)。
image.png
image.png
o PX SEND (HASH)
生产者(Producer)依照哈希值将数据发生给相应的消费者(Consumer)。
image.png
o PX SEND (HASH (BLOCK ADDRESS))
生产者(Producer)依照哈希值(由数据块地址而不是数据记录中的字段数值计算得出)将数据发生给相应的消费者(Consumer)。
提示:如果要使 DML 语句并行化,需要集合当前会话的并行 DML 属性。
image.png
image.png
o PX SEND (HYBRID (ROWID PKEY))
生产者(Producer)依照 ROWID 和主键将数据发生相应的消费者(Consumer)。
image.png
image.png
image.png
o PX SEND (PARTITION (KEY))
以分区为划分粒度,生产者(Producer)依照分区键值将数据发送相应的消费者(Consumer)。
关键词释义
并行颗粒(Granule)并行处理中的最小工作单位。Oracle 将可并行操作(如表扫描)划分为若干个
颗粒,并行服务进程每次执行一个颗粒的操作。包含数据块范围(Block Range)颗粒和分区
(Partition)颗粒
• 数据块范围(Block Range)颗粒:数据块范围颗粒是并行操作中的最基本颗粒。并行服务进程每次读取或操作一段连续的数据块。
• 分区(Partition)颗粒: 每个并行服务进程操作一个分区或子分区。因此,这种颗粒划分情况下,分区数量决定了最大并行度。通常在对本地分区索引进行范围扫描或者分区表之间进行关联时可能会以分区为粒度。
image.png
o PX SEND (ROUND-ROBIN)
串行进程以轮询方式将数据分发给并行服务进程。
关键词释义
轮询(Round Robin):轮询是一种最简单的资源选取方式。每一次从一组资源队列中选取一个,
且为上一次所选取的资源的下一个资源,如果选取到了队列的末尾,则从第一个继续轮询。
image.png
image.png
o PX BLOCK (ITERATOR)
以数据块范围为划分粒度,对一段范围的数据块进行迭代。
image.png
o PX PARTITION (LIST ALL)
以分区为划分粒度,并行服务进程访问一个列举分区,所有分区都会被访问。
image.png
o PX PARTITION (RANGE (ALL))
以分区为划分粒度,并行服务进程访问一个范围分区,所有分区都会被访问。
image.png
image.png
o PX PARTITION (MULTI-COLUMN)
以分区为划分粒度,并行服务进程访问一个以多字段为分区键的范围分区,并对分区键做裁剪, 只访问匹配的分区。
image.png
o PX PARTITION (HASH (ALL))
以分区为划分粒度,并行服务进程访问一个哈希分区,所有分区都会被访问。
image.png
image.png

o HASH JOIN (BUFFERED)
生产者(Producer)将数据发生给相同哈希值的消费者(Consumer),由消费者在私有内存中对数据进行哈希关联。
image.png
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论