我对PGA、sharedpool 、library cache的理解

我对PGA、sharedpool 、library cache的理解

现在比较清楚了,现总结一下,以便其他人能参考。请大家指正

当SQL开始执行时:
1、首先在PGA中进行语法、语义检查,(当然还有打开CURSOR等),通过检查后,消耗CPU资源进行SQL HASH VALUE的计算。

2、计算出HASH VALUE后,申请library cache latch,到library cache中检查是否存在hash value,如果存在,则参考参数sharing_cursor的设置(SIMILAR、FORCE、EXACT等)进行再次分析(可能还会使用hard parse,根据柱状图),如果确定是使用soft parse,则获得library cache中的执行计划,释放library cache。开始执行SQL,保持NULL模式的library cache lock /pin。然后到data buffer中查找需要的BLOCK是否存在。(data buffer cache暂不讨论)
这个时候library cache latch只是用来检查hash value和获得执行计划。

3、如果找不到,或者找到以后还是确定需要使用hard parse,则释放library cacht latch,申请shared pool latch,shared pool latch做的事情就是在free list(一个hash table)中申请获得free的buffer。如果申请到,则锁定空间

4、 释放shared pool latch,申请library cache latch,在锁定的空间上将sql 语句和执行计划插入到library cache中(这个library cache的空间其实是通过shared pool latch获得的)

5、释放library cache。开始执行SQL,保持NULL模式的library cache lock /pin。然后到data buffer中查找需要的BLOCK是否存在。(data buffer cache暂不讨论)

所以在大师们的作品里面, shared pool latch就只是负责申请free list中的空间。申请到空间以后就给library cache使用。我开始没有理解这个地方。


以前我的疑问:
1、shared pool buffer中除了free的空间外,还有其他被使用的空间,这些buffer的管理是谁来做,因为shared pool latch只负责free list 的管理。
答:由library cache latch负责
其实在shared pool 中,自由空间的管理和申请回收等都是shared pool latch来做。已有数据的buffer等的管理都由library cache latch来做(当然,还没有考虑到data dictionary cache)。

2、计算hash value、产生parse tree和执行计划等都在library cache中做。
答:计算hash value是在PGA中做。其他是在library cache中做。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值