Oracle 库缓存 和shared Cursor (下)

本文详细介绍了Oracle数据库中SharedCursor的概念及其组成部分ParentCursor和ChildCursor。解释了SharedCursor如何存储SQL语句及其执行计划,并概述了Oracle如何在库缓存中查找和使用这些对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shared Cursor是Oracle库缓存对象中的一种。

是指缓存在库缓存里的sql语句和匿名sql语句所对应的库缓存对象。
Shared Cursor 会存储目标sql的sql执行文本、解析树、该sql所涉及的对象定义、该sql所使用的绑定变量的类型和长度、以及该sql的执行计划。

Shared Cursor分为partent cursor 和child cursor。
它们的区别在于:目标sql的sql文本会存储在Parent Cursor 所对应的库缓存对象句柄的属性Name中。 sql的解析树和执行计划存储在child Cusor所对应的库缓存对象句柄的Heap 6中, 同时Oracle会在该sql所对应的Partent Cursor的heap 0 的child table中,存储从属于该Parent Cursor的所有Child Cursor的库缓存对象句柄地址。

在Oracle数据库里任意一条sql都会同时对应两个shared Cursor : parent cursor 和child cursor。

一个Partent Cursor可能会有多个child Cursor,因为一个sql可能会有多个执行计划。

Oracle 在解析目标sql时去库缓存中查找匹配shared Cursor的过程的步骤如下顺序:

1:根据目标sql的哈希值去库缓存中找匹配的hash Bucket。
2:然后在hash bucket的 库缓存对象句柄链表中查找匹配的Partent Cursor。
3如果找到了Parent Cursor ,接下来就在 child table中查找匹配的child Cursor.
4 如果找不到 Parent Cursor,则意味着没有共享的解析树和执行计划,需要重新开始解析目标sql,新生成一个Parent Cursor 和child 和Cursor。

5如果在第三步没有找到child Cursor,也要重新解析目标,生成一个child cursor,挂在对应Parent Cursor上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值