Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182611
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:46:11

       不需要,也不能。最好的方法是提供足够大的Buffer Cache并让表呆在那。如果读取了某些块需要占用空间,将没有办法确保它们不会被调出Buffer Cache

       完全不同于Shared Pool中的Library Cache的工作机制,我们可以使用DBMS_SHARED_POOL.KEEP将包,函数,过程或者匿名PL/SQL钉在Library Cache中,没有任何程序可以将其逐出共享池缓存,当然alter system flush shared_pool;除外。

       但是对于Buffer Cache,没有等价的机制可以确保表的数据块能够永久的驻留内存。

       虽然从Oracle8i开始引入了一个Keep Pool,但是这个很容易使人茫然。Keep池仅仅是缓冲缓存的一个部分,在其中存储特定的表的块。但是这并不是确保它们一只驻留在那里,如果过度填充了keep池,LRU列表同样会将尾端的块逐出keep池。

       不需要是因为缓冲缓存本来就是为了高效设计的,它会将访问最频繁的块放在内存中,因此如果将一个表的块驻留在内存,而不管是否使用,实际上降低了性能。

阅读(1220) | 评论(0) | 转发(0) |
0

上一篇:动态sql vs dbms_sql

下一篇:对象标识符

给主人留下些什么吧!~~