freeabl:这种类型的chunks包含的对象都是曾经被session使用过的,并且随后会被完全或部分释放的。这种类型的chunks不能临时从内存移走,因为它们是在处理过程中间产生的,如果移走的话就无法被重建。
1、对与"不能临时从内存移走"有些困惑,到时能不能够移走,何时能移走?
2、能够举几个例子,说明freeabl类型的chunks会包含的那些对象(绑定变量是否算一个)?


老师在课上讲过,但是自己复习的时候死活想不起来了....劳烦老师和各位高手们,再详细解释一下!
标签: 暂无标签
fanchungang

写了 4 篇文章,拥有财富 45,被 1 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P4 | 发表于 2010-12-6 09:48:21
我不能彻底解答LZ的问题,因为我也有些不明白的地方,以下只是个人见解,如有误请谅解:
freeabl是chunk的一种类型,我认为要想彻底解答LZ的问题,就必须对chunk中存储的信息有一个清晰的了解,记得向老师在“library cache 的一些内部机制”的帖子中有一些描述,文档中说bucket 中的list(由一个个的chunk构成,这些chunk下面还可以有很多子chunk)的每一个对象都有一个library cache handle指针,这个指针结构大概描述如下图:
2010-12-06_092521.PNG
所以对于"不能临时从内存移走",我的理解是这些对象可以移走,但他是被挤出内存的,也就是说shared pool的可用空间不够了,把这些不可重用的chunk先释放掉。但是这些“对象”是什么?我有点困惑,在上面的图中存不存在这个对象,我感觉都不像,因为那些对象是可重用的,只有类似中间数据的对象是不可重用的,也就是不能为众多session所共享的,

至于LZ的第二个问题,其实就是第一个问题的另一种说法,如果把freeabl包含的内容弄清楚了,那第一个问题也就自然明白了,但是绑定变量肯定不在freeabl中,它甚至不再shared pool中,绑定变量的相关信息存在与UGA中(共享服务器下可能存在与large pool或shared pool中)。

很佩服LZ这种精细的学习精神,向老师的那个PPT我也看过了,都没有想的这么深入。
回复

使用道具

P4 | 发表于 2010-12-8 23:58:55
非常感谢,学习了!
回复

使用道具

P6 | 发表于 2010-12-9 10:58:33
Oracle在解析l的时候,不仅仅是共享的内容需要放在shared pool中,在解析的过程中,对于一些会话产生的中间数据,Oracle也会放在shared pool中,这些数据是临时产生的,使用完成以后马上释放,因此你看到的freeable类型的chunk,一般都是正在使用的chunk。
因为Oracle 的PGA空间非常珍贵,而shared pool也是server process的寻址空间,因此server process的一些中间处理结果可能会放在shared pool中。
freeable类型的chunk一般都是不大问题,因为都是临时存放的,马上会释放。
甚至于这些chunk都不会挂载chain上。
回复

使用道具

P4 | 发表于 2010-12-9 12:48:05
本帖最后由 fanchungang 于 2010-12-9 12:49 编辑

回复 oraunix 的帖子

谢谢老师,这下很清晰啦!
另外还请老师指导一下,我这观察了一下sharedpool的转储文件(使用alter session set events 'immediate trace name heapdump level 2';)得到如下结论是否正确?重点是第一条
1、        Shared pool首先被划分为多个很大的sga_heap每个sga_heap是一组chunk的集合(包括4种chunk类型)
2、        Free类型的chunk由Free_List和Reserved_Free_List链表管理
3、        Recr类型的chunk使用lru first算法管理,在dump文件Unpinned_Recreatable_Chunks(Lru First)部分可以看到
4、        Perm类型的chunk在dump文件的Permanent_Chunks部分列出
5、        每个一个sga_heap都包含响应的上述2、3、4部分内容
回复

使用道具

P6 | 发表于 2010-12-9 17:16:26
这就是我们上课讲的“子shared pool”的概念。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈