ORACLE ONE PASS AND MULTI PASS

谈到ONE PASS AND MULTI PASS,那么不得不谈谈oracle sort,不知道大家是不是这么认为,给的内存多了,那么SORT是不是就性能就好了呢?答案肯定是否定的,那么我们先介绍下oracle 的SORT。

其实在数据库环境中,很多时候都是伴随着排序的,比如创建索引,group by ,order by,union,分组函数等等。一般情况下,应该是排序在cache中性能是最好的,完了是ONE pass,最差的就是multi pass,但是这不是绝对的,如果你PGA_AGGREGATE_TARGET一味的加大,排序的性能可能直线下降,比MULTI pass的性能还差,在我们OLAP环境中,不要期望所有的排序都在CACHE中,ONE PASS是我们要调优的重点,因为MULTI PASS性能最差。

这里了解一下排序的机制,排序是私有的,他的排序区是有大小限制的,一次排序超过这个限制了,不得不用到临时表空间。

监控排序相关的视图:V$SQL_WORKAREA、V$SQL_WORKAREA_ACTIVE、V$SORT_USAGE,这个大家下去自己查阅联机文档

从9i开始,workarea_size_policy 是AMM(自动内存管理)AMM会有一个后台进程每3秒钟为检查负载情况,为每个进程合理的更新最小内存ONE-PASS点,所以要找这个点从9i开始就交给oracle自己完成了,我们不需要再去配置sort_area_size等相关的参数。如果workarea_size_policy 是MANUAL的,那么可以研究一下sort_area_size 相关的参数。总的进程PGA大小是由PGA_AGGREGATE_TARGET决定的,其实排序的时候要维护一个二叉树,如果这个二叉树很大的话,那么很消耗CPU资源。

cache模式:当一个排序进程读取数据源,写到workarea_size_policy 的时候,incoming data和tree没有被填充满就结束了排序的情况,就是cache模式,这种是性能最好的情况。

one-pass模式:当一个排序吧incoming data和tree填充满以后,如果再继续填充,那么会把工作区里面的数据进行分片,叫sort runs,这个排序运行片归档至临时表空间。那么如果排序很大,就会有很多的sort runs,归档到临时表空间的sort runs还的重新进行一次merge,这里有一个基于排序区的宽度(maxintermediatemergewidth),也就是一次merge的宽度,可以通过10032和10033查看这些内容,比如这里有50个sort runs,这个宽度是100,那么我们merge一次就可以完成,这里就叫做one-pass。

multi-pass模式:如果merge一次,不够,需要多次merge。多次merge,肯定增加IO压力。所以这种是效率最差的。

当做工作区是AMM的时候,如果不能cache,那么就要切换到minimum one-pass memeory.

这里只介绍几种模式,具体优化以后有时间再续。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值