Oracle并行基础一

Oracle并行基础连载一)

作者:沃趣科技高级数据库技术专家 魏兴华



概述


Oracle企业版有一项非常厉害的技术:并行查询,也就是说一个语句可以雇佣多个服务器进程(parallel slaves也叫PX slaves)来完成这一个查询所需要的结果。并行操作不仅仅能够充分利用主机的CPU资源,也能够充分利用系统的IO资源、内存资源,这看起来是一个优点,但是也需要看情况,如果数据库系统没有太多的空闲CPU、空闲IO或空闲内存资源,那么并行技术是否要使用非常值得考虑,甚至即使系统有着很多的CPU空闲资源,但是IO资源已经远远不够,那么同样需要考虑是否要使用并行(并行往往产生大量的IO)。鉴于并行操作的工作方式,不能让它在系统中被滥用,否则可能导致系统的资源很快的被耗尽。并行操作本身也是复杂的,它有着很多串行执行所不具备的概念,例如table queue,数据分发方式等等,并且阅读并行语句执行计划的方式也与串行可能会有所不同。
并行操作的目的是为了提升语句执行的线性度,如果一个语句串行执行的时间为4分钟,那么通过指定4个并行来操作,可以加快查询执行时间为1分钟,当然这只是一种预期,现实的情况往往不能达到这种线性度。有一些消耗和事实需要了解:

  • 雇佣并行进程本身需要一些时间,这些时间往往比较短,如果进程池中没有可用的并行进程,那么还需要操作系统去spawn出需要的并行进程,这时数据库可能会遭遇os thread startup等待。如果语句执行时间只有数秒,你要考虑它是否适合使用并行。
  • QC进程给PX slaves分配工作,这会消耗一些时间,这个时间一般也非常短。例如QC进程需要给每个PX slave进程分配扫描ROWID的范围。
  • 如果并行查询要返回大量的数据给客户端,那么仅有的一个QC进程本身可能会成为瓶颈。
  • 由于Oracle的并行执行采用的是生产者消费者模型,因此一般DOP为4的查询,最终雇佣的PX slaves为8,再加上QC进程本身,一共会占用9个系统进程,你要认识到付出的这些是否值得。
  • 在Exadata下即使使用串行查询,由于在IO层面默认就是并行,因此Exadata下的语句并行效果没有非Exadata下好。

为了让并行能够非常好的发挥作用,有一些要求需要被满足:

  • 非常有效率的执行计划,如果执行计划本身非常糟糕,使用并行可能并不能多大程度上改善语句的执行效率。
  • 数据库系统有着充足的资源可用。这点已经在文章的开头提到过。
  • 工作量的分配没有明显的倾斜,大家都熟悉短板理论,如果某一个PX slave干了绝大部分的活,那么最终的响应时间最大的瓶颈就是它。

也许上面的很多概念和术语你还不清楚,没关系,我们下面的内容都会介绍到。使用并行首先应该考虑的问题是如何分配工作量,在串行执行的情况,这个问题不用考虑,只有一个进程干活,所有的工作都是由它来完成,但是如果使用了并行操作,那就意味着有多个进程在干同样一件事,工作的分配就显得非常的重要。

单表的并行操作

对于单表的并行操作,工作量的切分是比较简单的,Oracle也没有设计任何复杂的算法,它一般是按照
ROWID或者分区(假如它是分区表的话)来分配工作。例如下面的并行查询:

上面的SQL及其执行计划显示,对表test以并行度2进行了记录数的统计,Id为5的行源Operation部分为:PX BLOCK ITERATOR,这是一个在并行操作中经常能看到的一个操作,代表了QC进程按照ROWID把表做了切分,每个PX slave扫描表的不同范围,然后每个PX slave聚合出自己所扫描部分的记录数(Id=4,SORT AGGREGATE ),最后把结果发送给QC,QC进一步聚合这些PX slaves的结果形成一个记录返回给客户端。
通过SQL MONITORING可以看到的更为直观(下图),绝大部分的工作都是通过蓝色的PX slaves来完成的,然后这些PX slaves把各自做过预聚集的结果发送给(行源ID为3)QC做最终的聚合。

不过我们随着后续的学习会发现,这里的这个例子只雇佣了一组PX slaves进程,这在Oracle并行的世界中是一个特殊案例。按照Oracle的生产者、消费者模型,一般会雇佣两组PX slaves,一组作为生产者扫描数据,另一组作为消费者把从生产者接收过来的数据做各种加工。(不过这个例子可以把QC作为消费者看待)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值