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缓存池使用解析的更多相关文章

  1. Oracle SQL的硬解析和软解析

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.在Oracle中存在两种类型的SQL语句,一类为 DDL语句(数据定义语言),他们是从来不会共享使用的,也 ...

  2. Oracle sql执行计划解析

    Oracle sql执行计划解析 https://blog.csdn.net/xybelieve1990/article/details/50562963 Oracle优化器 Oracle的优化器共有 ...

  3. Oracle缓存表与Oracle缓存的区别

    一.Oracle缓存表 与 Oracle缓存 的概念 Oracle 缓存:是把Oracle近期查询的语句放置在Oracle设定的缓存当中. Oracle 缓存表:是把某个表放置在缓存当中,缓存是Ora ...

  4. SQL Server 2014里的缓存池扩展

    在今天的文章里我想谈下SQL Server 2014里引入的缓存池扩展(Buffer Pool Extensions).我们都知道,在SQL Server里,缓存池是主要的内存消耗者.当你从你存储里读 ...

  5. 缓存池扩展 (Buffer Pool Extension)实践

    SQL Server 2014缓存池扩展 (Buffer Pool Extension)功能可以将缓存池扩展到较快的SSD存储上.为内存比较紧张的系统提供了新的扩展途径. Buffer Pool 扩展 ...

  6. oracle 共享池( shared pool )

    Oracle共享池 Oracle共享池(Share Pool)属于SGA,由库高速缓存(library cache)和数据字典高速缓存(data dictionary cache)组成. 库高速缓存 ...

  7. 银行账户管理系统(oracle数据库连接池,数据库的链接,)

    /* * 银行账户管理系统: * 属性:账户id,姓名,金额salary,利息类型: *管理员模块实现的功能: * 1.给用户开户 * 2.查询所有账户信息 * 用户模块实现的功能: * 1.显示用户 ...

  8. LRU在MySQL缓存池的实现

    MySQL的InnoDB引擎设置有索引及数据缓存池,其中用到的LRU算法来维持缓存的命中率 这里用到了顺序表list来作为缓冲池,每个数据节点称为block 该算法采用“中点插入法”:当插入一个新bl ...

  9. UITableView系列(1)---Apple缓存池机制

    一.概述 关于UITableView的基本使用, 其实十分简单.但是做App最重要的之一就是细致,技术方面要做到细致, 必须深入了解底层, 才能做出优化让程序跑得更快.那么这一系列文章从我实际项目中获 ...

随机推荐

  1. 【第三课】ANR和OOM——贪快和贪多的后果(上)

    恼人的ANR 早先年用Android的时候,就连很多知名的app也总是莫名其妙崩溃,好像手机快的时候会崩溃,手机卡的时候app会卡死.卡死的时候会弹出来一个框,询问是要结束app还是继续等待.这就是A ...

  2. [Tool] PowerDesigner

    一般项目的生命周期: 1.需求分析 2.需求规格说明书 3.总体设计 4.详细设计 5.编码实现 6.测试,试运行. 7.验收 8.后期维护 PowerDesigner 可以把软件生命周期的每一个阶段 ...

  3. SQL Server获取下一个编码字符实现

    周末看到SQL Server 大V潇湘隐者的获取下一个编码字符串问题,本来作为以上博文的回复,也许回复内容长度超过其允许限制,无法提交.鉴于此,特记录SQL Server实现过程,方便自己回顾和查阅. ...

  4. CSS3属性transform详解

    在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形处理,本文将对此做详细介绍. 一.旋转 rotate 用法:transform: rotate(45 ...

  5. 10个出色的NoSQL数据库

    http://www.infoq.com/research/nosql-databases?utm_source=infoqresearch&utm_campaign=lr-homepage ...

  6. CentOS6.5 FTP配置

    一:安装vsftpd 查看是否已经安装vsftpd rpm -qa | grep vsftpd 如果没有,就安装,并设置开机启动 yum -y install vsftpd chkconfig vsf ...

  7. Dalvik VM和JVM 的比较

    dx:dx工具用于将.class字节码(bytecode)转换为Android字节码(保存在.dex文件中)这个字节码文件 是给 Android 的 Java 虚拟机(Dalvik虚拟机)运行用的. ...

  8. 单例(Singleton pattern)模式的七种写法

    转载请注明出处:http://www.cnblogs.com/smbk/ One: public class Singleton { private static Singleton instance ...

  9. H5实现的可自定义贪吃蛇游戏

    原创游戏,使用lufylegend.js开发 用canvas实现的贪吃蛇游戏,与一般的贪吃蛇游戏不同,图片经过美工设计,代码设计支持扩展和自定义. 游戏元素丰富,包括障碍物(仙人掌),金币(奖励),苹 ...

  10. Android 多语言

    Android 多语言 在res文件上右击创建新的values文件 在strings文件中设置多语言 3.在layout文件中使用 @strings/key 引用相应资源