Library cache中的信息
(读shared pool的深入探讨(四)--shared pool的内存分配及管理一文的疑问)
使用ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level 32';命令后转储Library cache相关信息,在转储信息中,可以找到所执行SQL语句所依赖的对象信息,
这里的handle=52d82e58就是sql依赖的对象信息,如下所示(摘自eygle的例子),我的问题是,Library cache不是只包含SQL语句的语法树、执行计划等信息,为什么这里还包含表信息。
还有就是:
ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level LL';
与
alter session set events 'immediate trace name heapdump level 2';
的区别。
是不是个命令转储的信息只包括LIBRARY_CACHE,而第二个命令转储的信息包括共享池中的所有内容。
[php]
BUCKET 63037:
LIBRARY OBJECT HANDLE: handle=52d82e58
name=EYGLE.EMP
hash=7310f63d timestamp=08-26-2004 10:23:40
namespace=TABL/PRCD/TYPE flags=KGHP/TIM/SML/[02000000]
kkkk-dddd-llll=0000-0501-0501 lock=0 pin=0 latch#=1
lwt=0x52d82e70[0x52d82e70,0x52d82e70] ltm=0x52d82e78[0x52d82e78,0x52d82e78]
pwt=0x52d82e88[0x52d82e88,0x52d82e88] ptm=0x52d82ee0[0x52d82ee0,0x52d82ee0]
ref=0x52d82e60[0x52d82e60, 0x52d82e60] lnd=0x52d82eec[0x52d7dcf0,0x52d89fc8]
LIBRARY OBJECT: object=52d81594
type=TABL flags=EXS/LOC[0005] pflags= [00] status=VALD load=0
==>Type:对象类型,这里是一张表
==>flags:代表对象状态
DATA BLOCKS:
data# heap pointer status pins change alloc(K) size(K)
----- -------- -------- ------ ---- ------ -------- --------
0 52d8c1e4 52d8161c I/-/A 0 NONE 0.66 1.09
8 52d81238 52d80a18 I/-/A 0 NONE 1.10 1.13
10 52d8129c 52d80ea0 I/-/A 0 NONE 0.12 0.37
HEAP DUMP OF DATA BLOCK 0:
******************************************************
HEAP DUMP heap name="library cache" desc=0x52d8c1e4
extent sz=0x224 alt=32767 het=16 rec=9 flg=2 opc=0
parent=0x5000002c owner=0x52d81594 nex=(nil) xsz=0x224
==>每个heap descriptor 都包含一个owner部分,指向所有者,这里的 52d81594 也就是EYGLE.EMP
==>指向的Library对象: LIBRARY OBJECT: object=52d81594
EXTENT 0 addr=0x52d81220
Chunk 52d81228 sz= 540 perm "perm " alo=196
52D81220 5000021D 00000000 [...P....]
52D81230 52D81584 000000C4 5000002C 00000824 [...R....,..P$...]
52D81240 52D81594 52D80A00 52D80A08 00000000 [...R...R...R....]
(等等,省略)
[/php]
原文出处:http://www.eygle.com/internal/shared_pool-4.htm
相关文章