请问一下,oracle数据库能不能把磁盘上的某个数据表,固定缓存在oracle系统的内存中啊

[复制链接]
查看11 | 回复9 | 2011-11-1 16:26:29 | 显示全部楼层 |阅读模式
请问一下,oracle数据库能不能把磁盘上的某个数据表,固定缓存在oracle系统的内存中啊?
内存的计算速度最大可以达到磁盘的上百万倍啊。

回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
keep池
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
选择:

default_pool
√keep_pool

recycle_pool
keep_pool一般是把常用的大表放在里面,免得内存中的其他热点表被挤出内存。我学的是这样的。
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
学习。。。。
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
就算是keep有时也可能被挤出来,所以keep里面也要有针对性的规划表的cache原则
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
ocpdba591 发表于 2012-9-7 11:51
就算是keep有时也可能被挤出来,所以keep里面也要有针对性的规划表的cache原则

alter table t storage(buffer_poolkeep),这个是在一个事务中指定t表使用keep_pool吧?
可以指定t表从数据库open开始就在keep_pool中缓存么?
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
wagneryou 发表于 2012-9-7 12:06
alter table t storage(buffer_poolkeep),这个是在一个事务中指定t表使用keep_pool吧?
可以指定t表从数 ...

一般不须要吧,如果你非要这么做,那么你可以弄个系统触发器,里面包含类似这样的语句:
select /*+full(t)*/ count(*) from tabname t;
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
ocpdba591 发表于 2012-9-7 12:09
一般不须要吧,如果你非要这么做,那么你可以弄个系统触发器,里面包含类似这样的语句:
select /*+fu ...

优化器没怎么用过,再去翻翻书,赐教了,柯南。
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
本帖最后由 gongcheng28 于 2012-9-7 16:01 编辑
ocpdba591 发表于 2012-9-7 12:09
一般不须要吧,如果你非要这么做,那么你可以弄个系统触发器,里面包含类似这样的语句:
select /*+fu ...

那应该怎么将表置于keep pool中呢?
alter table test storage(buffer_pool keep);
create table test storage(buffer_pool keep) as select * from dba_objects;
这两个语句应该都是永久将test表放到keeppool里面去的吧。

ps:keeppool的帖子。 http://www.itpub.net/thread-1561750-1-1.html

回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
gongcheng28 发表于 2012-9-7 15:40
那应该怎么将表置于keep pool中呢?
alter table test storage(buffer_pool keep);
create table tes ...

如果真是那种小而且经常访问的表,那就在keep的基础上再设置cache属性,即使其老化机率降低到最小
另外,并不是说你设置keep属性这个表就在启动时自动加载到keep池中;而是说在你读这些表相应的块时,这些块会灌到keep池中,所以除非你一启动就全表扫描这张表,否则只有这张表被读到的块才会被cache到keep池中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行