« 关于shared pool的深入探讨(四) | Blog首页 | 关于shared pool的深入探讨(二) »
关于shared pool的深入探讨(三)
链接:https://www.eygle.com/archives/2004/10/shared_pool-3.html
ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level LL';
其中LL代表Level级别,对于9.2.0及以后版本,不同Level含义如下:
Level =1 ,转储Library cache统计信息
Level =2 ,转储hash table概要
Level =4 ,转储Library cache对象,只包含基本信息
Level =8 ,转储Library cache对象,包含详细信息(包括child references,pin waiters等)
Level =16,增加heap sizes信息
Level =32,增加heap信息
Library cache由一个hash表组成,而hash表是一个由hash buckets组成的数组.
每个hash bucket都是包含library cache handle的一个双向链表。
Library Cache Handle指向Library Cache Object和一个引用列表.
library cache对象进一步分为:依赖表、子表和授权表等
我们看一下library cache的结构:
通过
ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level 4'
获得以下输出(这部分信息来自Oracle8i,Trace文件可以从www.eygle.com上找到)
第一部分(等价于Level 1):
LIBRARY CACHE STATISTICS: |
这部分信息也就是v$librarycache中显示的.
第二部分(等价于Level 2中的输出):
|
在Oracle8i中,Oracle以一个很长的LIBRARY CACHE HASH TABLE来记录Library Cache的使用情况
"*"代表该Bucket中包含的对象的个数
在以上输出中我们看到Bucket 198中包含四个对象.
我们在第三部分中可以找到bucket 198:
|
我们看到这里包含了四个对象.
我们再来看看Oracle9i中的情况:
参考文件: hsjf_ora_15800.trc
|
Oracle9i中通过新的方式记录Library Cache的使用状况.
按不同的Hash Chain Size代表Library Cache中包含不同对象的个数.
0表示Free的Bucket,>20表示包含超过20个对象的Bucket的个数.
从以上列表中我们看到,包含一个对象的Buckets有217个,包含0个对象的Buckets有130855个.
我们来验证一下:
|
434/2 = 217,证实了我们的猜想.
通过HASH TABLE算法的改进,Oracle Library Cache管理的效率大大提高.
历史上的今天...
>> 2021-10-31文章:
>> 2012-10-31文章:
>> 2011-10-31文章:
>> 2010-10-31文章:
>> 2008-10-31文章:
>> 2007-10-31文章:
>> 2006-10-31文章:
>> 2005-10-31文章:
By eygle on 2004-10-31 09:24 | Comments (0) | Internal | 83 |