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