KEEP池的CACHE特点

KEEP池的使用十分简单,设置DB_KEEP_CACHE_SIZE的值大于0,就可以将其他对象的BUFFER_POOL参数设置为KEEP了。

ALTER TABLE T STORAGE (BUFFER_POOL KEEP);

SELECT COUNT(*) FROM T;

SELECT COUNT(*) FROM T;

从第二次才从KEEP池读取

当KEEP池满了后 新进来的表将会挤掉前面表所占的内存

对于第一个查询全部物理读比较好理解,这是由于当时KEEP池中的空间被T表占满了,隐藏这时候对T2的查询需要从物理磁盘读取。执行完这个查询,可以发现,T2表全部放入缓存中,T表的数据被替换出一部分,还有3000多个BLOCK存储在KEEP池中。但是对T的查询确全部由物理读组成,而KEEP池中的缓存没有起作用。

对于普通的DEFAULT池,Oracle使用的是最近最少使用算法,在内存中有一个类似链表的结构。当DB_CACHE填满后,Oracle会从将这个链表的最少使用端交换出去,用来存放新的数据。而且会根据新的数据的性质,选择把新的数据放到最多使用端还是最少使用端。

如果DB_CACHE满后,执行的是索引扫描,则Oracle认为需要缓存这些数据,因此会清空最少使用端的空间,存放索引扫描的缓存数据。如果是大表的全表扫描,则Oracle认为这些数据是很少需要被访问的,因此清空最少使用端的空间放入表扫描的缓存数据后,仍然放回到最少使用端。

而KEEP池没有采用这种算法,KEEP池其实是一块可用内存采用类似循环的算法进行访问。如果KEEP池里面还有剩余空间,则新的数据会首先使用剩余的空间,如果KEEP池已经存储满了,Oracle会从头开始重用KEEP池。

这就是对T表的查询导致了全部的物理读的原因。由于T2表将T表中最初部分数据替换出KEEP,导致了查询T表的时候,开头部分的数据无法找到,产生了物理读后在KEEP池中替换了T表中间部分的数据,同样的道理,读取到T表中部的时候,又把T表末尾的数据替换出去了。因此,执行完查询发现,对T表查询全部都是物理读,KEEP池缓冲中的内容没有起作用。

而且,由于T表的大小超过了KEEP池的大小,因此T表末尾部分的数据又会将开头部分的数据替换出去,因此,再次对T表查询仍然全部都是物理读。

通过测试可以发现,CACHE选项没有起作用,其实这也不难理解,既然放到单独的KEEP池中,那么必然打算将这个对象缓存,因此Oracle对所有KEEP池中的对象采用了默认CACHE的方式。而忽略对象本身的CACHE和NOCACHE选项。

KEEP池虽然有很多特点与DEFAULT池有较大的区别,但是有一点却是二者是相似的:最近最常用的BLOCK最晚被替换出内存。

虽然KEEP池没有采用LRU链表的方式,但是Oracle仍然考虑了LRU的算法,KEEP池的缓存中,仍然是越常用的BLOCK保留时间越长。

时间: 2024-11-09 03:40:50

KEEP池的CACHE特点的相关文章

redis mysql 连接池 之 golang 实现

分享一下 golang 实现的 redis 和 mysql 连接池,可以在项目中直接引用连接池句柄,调用对应的方法. 举个栗子: 1 mysql 连接池的使用 (1) 在项目子目录放置 mysql.go (2)在需要调用的地方导入连接池句柄 DB (3)调用 DB.Query() 2 redis 连接池的使用 (1)在项目子目录放置 redis.go (2)在需要调用的地方导入连接池句柄 Cache (3)调用 Cache.SetString ("test_key", "te

SSD缓存方案之LVM cache

SSD作缓存方案之LVM cache 1. 前言 最近因为工作的需要,接触了一些SSD作缓存相关的知识.所谓SSD作缓存就是使用fast device(例如SSD),给slow device(例如机械硬盘)做缓存,以提高计算机整体的I/O存储性能. 目前在个人计算机中,使用的比较多的是机械硬盘和固态硬盘(SSD).机械硬盘具有容量大,价格便宜,容错性好,寿命较长等优点:缺点是读写性能相对机械硬盘有比较大的差距.固态硬盘的优点是读写性能较好,特别是随机读写性能:缺点是价格比较昂贵,容量小,写入寿命

Oracle体系结构和用户管理

数据库体系结构      定义:             数据库的组成,工作过程,数据库中的数据的组成与管理机制. 组成:             实例.用户进程.服务器进程.数据库文件. 其他文件(参数文件.口令文件.归档文件). oracle的概念:    程序全局区(PGA):        定义:              服务器进程使用的一块包含数据和控制信息的内存区域, PGA是非共享的内存,在服务器进程启动或创建时分配的 (在系统运行时,排序,连接等操作也需要对PGA分配). 用命

几道简单容易被问的题

1. ArrayList,Vector,LinkList区别?2. HashMap和Hashtable的区别?3. String类为什么要重写hashCode和equals方法?如果重写equals方法而不重写hashCode方法会出现什么问题?4. 写出下面程序运行的结果,给出简单的理由说明为什么会出现这样的结果? Integer i1=130; Integer i2=130; Integer j1=70; Integer j2=70; Integer m1=new Integer(10);

优酷、YouTube、Twitter及JustinTV视频网站架构设计

优酷视频网站架构 一.网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商.     硬件方面,优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主,2007的数据表明,优酷网已有1000多台服务器遍布在全国各大省市,现在应该更多了吧. 二.网站前端框架 从一开始,优酷网就自建了一套CMS来解决前

Java自动装箱和自动拆箱操作

1.Java数据类型 在介绍Java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型).基本类型的数值不是对象,不能调用对象的toString().hashCode().getClass().equals()等方法.所以Java提供了针对每种基本类型的包装类型.如下: Java基本数据类型 INDEX 基本类型  大小 数值范围 默认值 包装类型 1 boolea

Spotlight监控Oracle数据库的链接创建

最近在做性能测试时,由于要挂载空间数据,开发人员直接将所有业务表都挂到了Oracle数据库中.最近做了几次测试发现响应时间和吞吐量都不是很理想,进行一番分析后怀疑可能在Oracle中出现问题,因此再网上找了一下相关的监控程序,最终发现Spotlight,但是没有详细的说明(也有可能是我没找到),下面将我之前如何连接Oracle并进行监测的一些经验分享一下,如有瑕疵请各位指教. 首先Spotlight的安装和部署我就不多说了,我相信大家都是很聪明的,安装一下so easy. 这里我要说的是一定要安

网站框构分析 一

Facebook用户量大的问题由它的分布式缓存系统主要解决,剩下的自然是开源的mysql更合适了 <img src="https://pic2.zhimg.com/c6d403f1e89fa46c5567e0cbcbb024ad_b.jpg" data-rawwidth="1310" data-rawheight="333" class="origin_image zh-lightbox-thumb" width

Twitter网站架构介绍

http://www.kaiyuanba.cn/html/1/131/147/7539.htm作为140个字的缔造者,twitter太简单了,又太复杂了,简单是因为仅仅用140个字居然使有几次世界性事件的传播速度超过任何媒体,复杂是因为要为2亿用户提供这看似简单的140个字的服务,这真的是因为简单,所以复杂.可是比较遗憾的是目前在中国大陆twitter是无法访问的,但作为一个爱好架构的程序猿,这道墙是必须得翻的,墙外的世界更精彩.今天就结合网络上的一些资料,来浅谈一下我对twitter网站架构的