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. 使用Spark分析拉勾网招聘信息(二): 获取数据

    要获取什么样的数据? 我们要获取的数据,是指那些公开的,可以轻易地获取地数据.如果你有完整的数据集,肯定是极好的,但一般都很难通过还算正当的方式轻易获取.单就本系列文章要研究的实时招聘信息来讲,能获取 ...

  2. 通过刷bios的方式在win8.1平板上启动windows phone模拟器

    最近买了个Windows8.1平板电脑,不是Surface Pro,太贵,而是国产的乐凡F2(64G.4G内存),CPU是赛扬U1037.最开始安装Visual Studio2013以及其他开发工具都 ...

  3. 使用Eclipse Installer安装Eclipse

    由于一些原因,需要重新安装Eclipse,登陆到Eclipse官网下载Eclipse时发现社区又推出了Eclipse Installer.所以就下下来尝尝鲜. 刚开始确实有些选项不太明白,不过现在挺喜 ...

  4. 在android设备上调试ionic应用

    方法1: ionic run android -l -c 将会在console中输出日志信息 方法2: (1).使用usb连接android设备,并打开android设备的调试功能 (2).在chro ...

  5. 有关CLR的初学小整理(可能理解不深刻,望大牛指出)

    1. .Net程序通过CLR去加载运行管理代码, 加载CLR的进程成为“宿主”,通常操作系统加载. 加载CLR的进程也可以为某个DLL,也成为“宿主” 2. 宿主接口使宿主能够对运行库的更多方面进行控 ...

  6. 推荐使用C++ 11

    如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11.当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的.我在下面给出了9个理由,它们分为 ...

  7. iOS常用的几种数据存储方式

    之前由于刚入行不久,对数据持久化不是很了解,尤其是用数据库存储大量数据的操作.经过摸索就在此总结一下,方便以后查阅 下面就简单介绍一下: 1.NSUserDefaults 感觉最常用的小量数据,属性, ...

  8. sql: sq_helptext

    --查看表生成脚本 sql server     --- '\r'是回车,'\n'是换行  /t相当于键盘的Tab键    --- 操作系统的不同,换行符操也不同:/r Mac /n Unix/Lin ...

  9. sql 事务使用

    BEGIN TRAN Tran_Money --开始事务 DECLARE @tran_error int; SET @tran_error = 0; BEGIN TRY UPDATE tb_Money ...

  10. Bootstrap 框架 栅格布局系统设计原理

    如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下 ...