ORACLE将表cache进SGA

来源:互联网 发布:淘宝下载安装最新版 编辑:程序博客网 时间:2024/05/17 09:22

尝试将表缓存进buffer pool,并长期keep在LRU热端,BUFFER_POOL和CACHE同时指定,用BUFFER_POOL来指定存储的缓冲池。

alter table T_FLY cache;

alter table T_FLY storage(buffer_pool keep);



因为内存空间是有限的,所以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 table_name from dba_tables wherebuffer_pool='KEEP';
查询到改表是放在keep区中的。

但是不意味着表已经被缓存了。
下面的语句把表缓存:
alter table  .... cache;
可以通过
select table_name from dba_tables where
table_name LIKE 'AD%' AND  LTRIM(rtrim
(cache)) ='Y'
查询到该表已经被缓存了。

加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。也可以手工来移出内存,命令如下:
alter table ... nocache;

原创粉丝点击