新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: 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池。
不需要是因为缓冲缓存本来就是为了高效设计的,它会将访问最频繁的块放在内存中,因此如果将一个表的块驻留在内存,而不管是否使用,实际上降低了性能。