oracle 成长历程-第三章:内存组件详解-buffer cache-概述及相关术语-1

3       内存组件详解-BUFFER CACHE

Server processes 把数据文件读进buffer cache。为提高性能,一次读有时候读多个块。DBWn 进程写数据从buffer cache写进数据文件。为提高性能,DBWn一次写多个块。

某一时间,buffer cache可能容纳一个块的多个拷贝。一个已存在的块的拷贝,但是对于满足server process 可能需要构建读一致拷贝从以前的镜像信息。

为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。而oracle对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做buffer cache。按照oracle官方的说法,buffer cache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。通过初始化参数:buffer_cache_size来指定buffer cache的大小。oracle实例一旦启动,该区域大小就被分配好了。

buffer cache所能提供的功能主要包括:

1)    通过缓存数据块,从而减少I/O

2)    通过构造CR块,从而提供读一致性功能。

3)    通过提供各种locklatch机制,从而提供多个进程并发访问同一个数据块的功能。

3.1     Buffer Cache术语

1、    Multiple Buffer Pools-Buffer pool 有三种类型:

n   Default:默认的池

n   Recycle:大对象池,当数据库读取某一大对象时候,可能导致其它对象的buffer老化,所以可以把大对象的读取指定到recycle池中,避免影响其它对象。这个池里默认为CR块。

n   Keep:和recycle相反,把常用对象的buffer长久keep在池中。 通过DB_KEEP_CACHE_SIZEBUFFER_POOL_KEEP)参数可以指定大小。

n   SQL> create table test (n number) storage (buffer_pool keep);

SQL> alter table test storage (buffer_pool recycle);

n   公式:Buffers in default pool = Total number of buffers (Buffers in recycle pool + Buffers in keep pool)

n   可以通过V$SEGSTAT_NAME, V$SEGSTAT, V$SEGMENT_STATISTICS这个三个视图进行段级别的监控。

n   Keep pool Recycle pooldefault pool采用的LRU算法是不同的,目前大多数资料所讲的LRU算法及关于buffer cache的话题,主要针对的是default pool。有些描述中的buffer cache即是指的 buffer cache中的 default pool,本书中同样如此。关于keep pool recycle pool 的算法资料较少。

2、    hash算法则是为了能够进行快速查找定位所使用一种技术。所谓hash算法,就是根据要查找的值,对该值进行一定的hash算法后得出该值所在的索引号,然后进入到该值应该存在的一列数值列表(可以理解为一个二维数组)里,通过该索引号去找它应该属于哪一个列表。然后再进入所确定的列表里,对其中所含有的值,进行一个一个的比较,从而找到该值。这样就避免了对整个数值列表进行扫描才能找到该值,这种全扫描的方式显然要比hash查找方式低效很多。其中,每个索引号对应的数值列在oracle里都叫做一个hash bucket

3、    如磁盘上数据文件的最小IO单元叫block一样,buffer cache的最小单元(或者说结构)叫buffer,每个bufferx$bh中每条记录有一一对应关系。

4、    data buffer header list的结构是用哈希桶Hash buckets来构建的,它按照分组。注意,block classblock type不同。

5、    Hash chain是在每一个Hash bucket内部,维护多个data buffer header的数据结构。

6、    Buffer descriptor存在于PGA,它实际属于client。它存储的消息是client提供的。

7、    Buffer Header

n   描述缓冲区的buffer

n   TSN, RDBA hash算法,为hash buckets获取一个固定的数字

n   被上层组件做为一种提示使用

8、    Buffers能够被请求为NULL, NEW, CR, CRX, SHR, EXL 模式。

9、    链表是一种数据结构,通过将对象串连在一起,从而构成链表结构。这样,如果要修改、删除、查找某个对象的话,都可以先到链表中去查找,而不必实际的访问物理介质。

10、buffer cache有两种LRU链表:

n   LRUWLRU Write list((checkpoint queue),);写链表,也就是dirty list,维护着当前的脏块。写链表是需要写入数据文件的脏数据块列表。

n   LRULRU List最近最少使用的链表。LRU链表是控制不包含任何数据的空闲空间(free buffers)、正在使用的空间(pinned buffers)和还没有写到写链表的脏数据块。

n   一个buffer只能被其中一个list cache

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/347643/viewspace-619857/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/347643/viewspace-619857/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值