库缓存相当于一个Hash Table由一组Hash Bucket构成,每个Hash Bucket存储相同哈希值的所有库缓存对象句柄,不同库缓存对象句柄间用指针连接,构成库缓存对象句柄链表(Library Cache Object Handles)。

【Oracle】Library Cache的基本结构_【Oracle】Library Cac【Oracle】Library Cache的基本结构_【Oracle】Library Cac_02【Oracle】Library Cache的基本结构_【Oracle】Library Cac_03【Oracle】Library Cache的基本结构_【Oracle】Library Cac_04

 

Hash Bucket

 

Hash Bucket主要用于

可执行对象的快速定位和存取

 

Library Cache Object Handle

 

【Oracle】Library Cache的基本结构_【Oracle】Library Cac_05

库缓存对象句柄(Library Cache Object Handle)是存储库缓存对象的一种结构,这些句柄包含了对象的相关属性,例如:名称、标记、指向对象内存地址的指针等。

【Oracle】Library Cache的基本结构_【Oracle】Library Cac_06

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

 

【Oracle】Library Cache的基本结构_【Oracle】Library Cac_07Handle对应可执行对象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语句、执行计划、执行文本等信息。

【Oracle】Library Cache的基本结构_【Oracle】Library Cac_08

 

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