Oracle Session Cursor

来源:互联网 发布:淘宝展现关键词是什么 编辑:程序博客网 时间:2024/06/16 01:55

Session Cursor 是Oracle数据库里的第二种类型的Cursor,它当前Session解析和执行sql载体。Session Cursor缓存在PGA中,Shared 缓存在SGA中。

Session Cursor和 Session是一一对应的,不同的Session的Session Cursor之间是没有办法共享的。

Session Cursor是有生命周期的,每个Session Cursor在使用的过程中都至少会经历一次
open parse bind execute fetch close阶段。 用过的Session不一定缓存在PGA中,它取决于Session_Cached_Cursors的值是否大于0。

Session Cursor也是以哈希表的方式存放在PGA中,Oracle也会通过相应的哈希运算来存储和访问当前Session的PGA中对应的Session Cursor。

在缓存Session Cursor的哈希表的对应Hash Bucket中,Oracle会存储目标sql对应的Parent Cursor的库缓存对象句柄地址。

当目标sql以硬解析的方式解析和执行完毕后,这个目标sql所对应的Shared Cursor就已经被缓存在库缓存中,它所对应的Session Cursor 也已经使用完毕,这时候存在如下两种情况:

1 如果参数Session_cached_cursors 的值等于哦0,那么Session Cursor就会正常执行Close操作。那么当上述目标再次执行时,就会重新打开一个Session Cursor,并且经历:open
parse bind execute fetch close阶段。

2 如果参数 SESSION_CACHED_CURSORS 的值大于0,那么当满足一定的额外的条件时,Oracle就不会对Session Cursor 执行close操作,而是会将其标记为Soft Closed,同时将其缓存在PGA中。这样做的好处是,当目标sql再次执行时,Oracle已经不需要为该sql再新生成一个Session Cursor了。 和软解析相比,此时Oracle就省掉了Open 和close操作。剩下的parse bind exectue fetch 还需要执行的,这个过程称为软软解析

软软解析与软解析比起来,其好处主要体现在如下几个方面:

1 软软解析在对Session Cursor的使用方面比软解析要好
因为软软解析不需要重启open一个 Session Cursor 和close Cursor。

2 软软解析对库缓存相关latch的争用方面会比软解析要好。
因为软软解析在获取shared Cursor时,需要遍历 bucket中的库缓存对象句柄链了,因此就不需要持有库缓存相关的latch了。在缓存Session Cursor的哈希表的对应的Hash Bucket中,Oracle已经存储了目标sql对应的parent Cursor的库缓存对象句柄地址了,因此此时可以直接访问。

Session Cursor和shared Cursor之间的关联关系总结如下;

无论是硬解析 、软解析还是软软解析,Oracle在解析和执行目标sql时,始终会先去当前Session的PGA中寻找是否存在匹配的缓存Session Cursor

如果在PGA中找不到匹配的Session Cursor,Oracle就会去库缓存是否存在匹配的Shared Cursor。如果找不到,就重新生成 Session Cursor 和一对Shared Cursor。如果只找到了Parent Cursor,而找不到Child Cursor,那么就会生成相应的Child Cursor。这两种情况对应的都是硬解析的过程。

如果在PGA中找不到匹配的Session Cursor,但是找到了shared Cursor,那么就重新生成Session Cursor,这个过程就是软解析。

如果在PGA中找到了匹配的Session Cursor,Oracle就可以通过这个Session Cursor直接访问到sql对应的Parent Cursor,这个过程就是软解析。

原创粉丝点击