oracle中如何把小表钉在内存中

oracle 8i中db_block_buffer的大小决定buffer cache的大小

oracle 9i&10g中由db_cache_size的大小来决定

因为内存空间是有限的,所以oracle采用LRU算法来调度谁来使用内存

但是因为许多的批处理操作(如全表扫描)可能会导致buffer cache的刷新,

这会导致将经常使用的数据挤出buffer cache

oracle在改进LRU算法的同时,采用了另一技术:就是buffer cache的多缓冲池做法

oracle的db_buffer_pool由三部分组成:

buffer_pool_defualt

buffer_pool_keep

buffer_pool_recycle

 

如果要把表钉死在内存中,也就是把表钉在keep区。

   相关的命令为:

alter table ..... storage(buffer_pool keep);

这句命令把表示表如果缓存的话是缓存在keep区。

可以通过语句:

select owner,table_name from dba_tables where buffer_pool='KEEP';查询到改表是放在keep区中的。

但是不意味着表已经被缓存了,只是说明你可以进去keep pool。

下面的语句把表缓存:

alter table  .... cache;

可以通过

select  owner,table_name from dba_tables where rtrim(cache)='Y';

查询到该表已经被缓存了。

加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。

也可以手工来移出内存,命令如下:

alter table ... nocache;

posted @ 2013-08-27 12:11  taowang2016  阅读(400)  评论(0编辑  收藏  举报