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也不用做