Oracle 中的share Cursor 和 Library Cache (上)

一 、Cursor 游标
Oracle中sql解析和执行的载体, 是一种数据结构
Oracle中的Cursor分为两种:
一种是shared Cursor 另一种就是session Cursor

share Cursor 是Oracle 缓存在Library Cache 中的几十种库缓存之一。
它所对应的库缓存对象句柄的Namespace属性值是 CRSR。

share Cursor里会存储目标Sql 的sql文本,解析树,该sql所涉及的对象的定义,该sql所使用的绑定变量类型的长度,以及该sql的执行计划等信息。

缓存在库缓存里的sql语句和匿名plsql语句所对应的库缓存对象。

二 、 库缓存 Library Cache
SGA的一块内存区域(更确切的说是,Shared Pool中的一块内存区域)
主要作用是缓存刚刚执行过的sql语句 pl\sql语句 (如存储过程、函数、包、触发器)所对应的执行计划 解析树 Pcode Mcode等对象。

库缓存对象: 缓存在库缓存中的对象称之为库缓存对象。

所有的库缓存对象都是以一种名为库缓存对象句柄的结构存储在库缓存中。

Oracle通过访问库缓存对象句柄来访问对应的库缓存对象。

Oracle以怎样的方式存储和访问库缓存对象句柄?

库缓存对象句柄 是以哈希表的形式存放存储在库缓存中,

Oracle会通过相关的哈希运算来存储和访问对应的库缓存对象句柄。

这里写图片描述

整个库缓存可以看作是由一组hash bucket所组成,每一个hash bucket都对应不同的哈希值。

对于单个hash bucket而言,里面存储的就是哈希值相同的所有库缓存对象句柄。

同一个hash bucket中不同的库缓存对象句柄之间会用指针连接起来,即同一个hash bucket中不同的库缓存对象句柄之间实际上组成一个库缓存对象句柄链表。

库缓存对象句柄有多个属性:

Name 库缓存对象句柄所对应的库缓存对象的名称。
Namespace 库缓存对象句柄所对应的库缓存对象所在的组名。
heap 0 Pointer 执行子结构heap 0的指针

heap 0的数据结构中两个属性:

tables 记录的是与该heap 0 所在的库缓存对象有关联关系的库缓存对象句柄地址的集合
child table 从属于该Heap 0 所在的库缓存对象的子库缓存对象的句柄地址的集合。

Data Blocks Pointer 存储一系列data heap的指针。
Oracle使用data heap 来存储这些动态运行时的数据。

Data Heap 简单的理解成 库缓存中的一块连续的内存区域,Data Heap是动态分配的,其大小并不固定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值