oracle快速将表缓存到内存中,使得访问速度加快。
重点部分:
共有2种方法:
--加入内存
alter table MDM_WLZSJ_CODEBG cache;
alter table MDM_WLZSJ_CODEBG storage(buffer_pool keep); ---常驻内存
--取消内存
alter table NDN_WLZ_CODEBG nocache;
alter table NDN_WLZ_CODEBG storage(buffer_pool default);
--查看是否加入缓存
SELECT * FROM USER_TABLES WHERE CACHE LIKE '%Y';
select table_name,OWNER,cache,buffer_pool from dba_tables where table_name='MDM_WLZSJ_CODEBG'; --查看是否缓存
select * from dba_segments where segment_name='MDM_WLZSJ_CODEBG' ; --查看表大小
两者区别:
1) cache是将表缓存到share pool 中,该操作直接将表缓存的热端,受LRU算法控制。
2)将表缓存到一个固定的内存storage空间中,默认情况下buffer_pool空间为0,。需手动设置空间大小。
刨根问底:
create table 表名 (字段) storage (buffer_pool keep); --建表时把表缓存到KEEP中
alter table 表名 storage(buffer_pool keep);--把已存在的表缓存至KEEP中
create table 表名(字段..) storage (buffer_pool keep) 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 where buffer_pool='KEEP'; ---查询到改表是放在keep区中的。
但是不意味着表已经被缓存了。
下面的语句把表缓存:
alter table .... cache;
可以通过
select table_name from dba_ tables where rtrim(cache)='Y';
查询到该表已经被缓存了。
加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。
也可以手工来移出内存,命令如下:
alter table ... nocache;