阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle缓存池使用解析

189次阅读
没有评论

共计 1353 个字符,预计需要花费 4 分钟才能阅读完成。

Oracle 有三种类型的缓存池,分别是 default,keep 和 recycle。默认情况下只会使用 default 缓存池,另外两种需要额外配置。

keep 缓存池相当于是一直很热的 default 缓存池,缓存池里的数据会一直保留,直到被其他使用该池的数据抢占,并且是使用先进先出的队列使用。

recycle 缓存池相当于是一直很冷的 default 缓存池,里面的数据会很快被清理。

一般情况下只需使用 default 缓存池即可满足需要,有时为了进一步提高效率,在了解表的使用模式的情况下,可以使用 keep 池来减少数据库物理读的数量,显著提高效率,这一切都建立在对数据使用模式很熟悉的情况。

使用 keep 缓存池

首先查看内存分配情况

show parameter memory_target;

show parameter sga_target;

show parameter db%cache_size;

这是在 11g 的版本上的情况,如果使用了自动内存管理,sga_target,db_cache_size,db_keep_cache_size 可能都是没有设置值的。

直接设置 db_keep_cache_size,如果不能成功可能需要设置一个 sga_target 下限值,然后再设置 db_keep_cache_size。

要使用 keep 缓存池还需要设置表的 buffer_pool 存储属性 (创建表时或者直接修改存储属性)

alter table xxx storage(buffer_pool keep);

alter table xxx modify partition part0 storage(buffer_pool keep);

设置完毕按理来说就可以开始使用 keep 缓存池了,一般的小量数据查询现在已经可以使用 keep 池了,但是全表扫描还不会使用 keep 缓存池,这是为什么呢,因为 11g 开始对全表扫描会使用一种 direct path read 技术,直接将数据从磁盘读到 pga,绕过缓存,也就当然不会将数据放在 keep 缓存池了。

由两个隐藏参数控制 direct path read 技术是否使用,_small_table_threshold 和_serial_direct_read。默认是开启 direct path read 的,当表小于_small_table_threshold 时,所读数据会放在数据库缓存里。

直接设置这两个值都不是很理想的方案。

如果想要将一个设置了 keep 的表的块全部装入 keep 缓存池里,可以使用一个技巧,使用索引进行全表扫描,强迫数据库将数据放到 keep 缓存池里。

select /+ index(test_keep idx_keep) / count(*) from test_keep;

keep 缓存池使用还有一个问题,如果是分区表某些分区是 keep,某些是 default,如果使用全表扫描的查询如果包含了 keep 的数据,也有 default 数据,则还是由于 direct path read 技术,已经在 keep 缓存里的数据会被无视。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/135222.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1353字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中