您的位置:首页 > 数据库 > Oracle

《基于ORACLE SQL优化》读书笔记-CURSOR

2014-02-14 11:05 337 查看
Shared Cursor:

 Parent Cursor(V$SQLAREA):存SQL文本

 Child Cursor(V$SQL):解析树和执行计划。

硬解析:

 找不到Parent Cursor

 找到Parent Cursor,但找不到ChildCursor

 危害:

 Shared Pool Latch 争用(常为CPU占用率高) 为child cursor分配内存

 库缓存相关Latch(用于共享SGA内存结构的并发访问控制)和Mutex(11gR1后,用Mutex代替库缓存相关Latch)争用

 

扫描库缓存对象句柄链表要持有Library Cache Latch.

硬解析Latch持有过程:

持有Library Cache Latch,没找到Parent cursor,释放它。持有LibraryCache Latch,持有Shared Pool Latch, XXXX 释放SharedPool Latch, 释放Library Cache Latch.

 

软解也会析持有库缓存相关Latch,但持有时间相对短,而且不会在持有Shared Pool Latch情况下持有LibraryCache Latch

 

Session Cursor:

 与session一一对应

 有生命周期(open,parse,bind,execute,fetch,close)

 ORACLE执行SQL前先去PGA中找是否有缓存的sessioncursor

ORACLE依靠Session Cursor将目标SQL涉及的数据从BUFFERCACHE的对应数据块读到PGA里,然后在PGA里做后续处理(排序,表连接),最后把结果返回。

软软解析:跟软解析比,省了OPEN一个新的session cursor所需要花费的资源和时间,CLOSE现有的SESSIONCURSOR也不用做
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CURSOR