库缓存相当于一个Hash Table由一组Hash Bucket构成,每个Hash Bucket存储相同哈希值的所有库缓存对象句柄,不同库缓存对象句柄间用指针连接,构成库缓存对象句柄链表(Library Cache Object Handles)。
Hash Bucket
Hash Bucket主要用于
可执行对象的快速定位和存取
Library Cache Object Handle
库缓存对象句柄(Library Cache Object Handle)是存储库缓存对象的一种结构,这些句柄包含了对象的相关属性,例如:名称、标记、指向对象内存地址的指针等。
Object Handle的主要属性
01 丨 Name
库缓存对象句柄对应的库缓存对象名称
02 丨 Namespace
库缓存对象句柄对应的库缓存对象的分组名
03 丨 Heap 0 Pointer
指向子结构Heap 0的指针
Namespace分类
Namespace值 | 含义 |
---|---|
CRSR | SQL语句和匿名PL/SQL语句 |
TABL/PRCD/TYPE | 表、视图、序列、同义词、存储过程、函数、Type和Package |
INDEX | 索引 |
CLST | Cluster |
BODY/TYBD | Type和Package的Body |
TRGR | Trigger |
Library Cache Object
Handle对应可执行对象Library Cache Object,通常以堆(Heap)的形式组成。Handle中指向第一个堆的指针为Heap 0,Heap 0中包含指向其他堆的指针信息。
Heap 0 指针
01
dependency table 该对象依赖的对象信息
02
child table 对象的子对象;比如同一个父游标对应的不同子游标
03
authorization table 对象的授权信息
04
type shared cursor,index,table,cluster,view,synonym,sequence,procedure,function,package,table body,package body,trigger等等。
05
data blocks data block也是一个指针,指向了data heap
Data heap
Data heap即存放真实数据的地方,主要包含库缓存对象的SQL语句、执行计划、执行文本等信息。
Heap | Usage | 备注 |
---|---|---|
0 | Object | 对象名称 |
1 | Source | 来源信息 |
2 | Diana | |
3 | Pcode | Pcode |
4 | Mcode | Mcode |
5 | Errors | 错误信息 |
6 | SQL Context | SQL语句、执行计划 |
7 | Free | 空闲 |
8 | Subordinate Heaps |