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;
Oracle、Linux、Unix