oracle数据库buffer,oracle database buffer cache

DB buffer cache

1.database buffer cache主要用于存放从数据文件中读取出来的数据块,也缓冲系统正在使用或者最近使用完的数据块。所有连接到数据库的用户,都可以共享该内存区域。

2.database buffer cache主要目的为优化物理I/O和保存常用的块在内存中,不常用的块写入数据文件中。

优化物理I/O:DB buffer cache用于缓存应用修改后的脏块,并在脏块生成前产生redo日志,在oracle中,redo日志的写入和脏块的写入是分开进行的,通过检查点进程(CKPT)来协调,这样可以提高物理I/O的写入效率。

保存常用块:使用LRU算法实现数据库中热块的长久保存,提高读取效率。

3.DB buffer cache中的数据块可能存在的状态:

未使用块:缓冲中从未被使用或者当前未被使用的块。

干净块:状态与数据文件中的数据块保持一致,不需要被检查点进程写入数据文件,可以被复用。

脏块:数据块被修改,且未写入磁盘。

总结:

在oracle DB

buffer中,脏块放入到检查点队列中,等待CKPT进行检查点位置维护并写入数据文件中;干净块放入到LRU链表,使用LRU算法进行管理。

4.每个缓冲数据块都具有两种访问模式:pinned或者free,用于控制多个会话对同一数据块的访问。

5.DB buffer cache通过LRU算法来实现缓冲的高效访问。

6.在DB buffer cache中进行数据块读取时,有当前模式读(current mode get,将发生脏读)和一致性读(consistent read get,默认,需要用到UNDO数据)。

7.DB buffer逻辑读和物理读:

逻辑读是指从DB buffer中获取数据;

物理读是指从闪存卡(flash cache)或者从磁盘中获取数据;

8.DB buffer的写入:

DBWn定时的把脏数据块和冷数据块放入到磁盘中,触发DBWn写的三种情况:

1.服务器进程需要进行物理读,但是buff中已经没有干净块可以使用了;

2.数据库主动触发检查点的时候;

3.将表空间置成只读表空间或者将表空间置成离线状态;

9.DB Buffer的读取

当客户端进程请求一个缓存块,服务器进程的搜索顺序为:

(逻辑读)搜索整个DB Buffer;

(优化物理读)如果开启闪存卡,则搜索闪存卡内容;

(物理读)如果上述两步均找不到,则服务器进程从数据文件中读取数据块并放入DB buffer中,再进行一次逻辑读。

10.缓冲触碰计数(buffer touch

counts)

oracle利用缓冲的触碰计数来实现LRU算法管理缓冲中的数据块。当一个缓冲数据块被pin住,则将数据块的touch count加1(为了防止touch count的暴增,oracle将3秒内所有的Pin操作,视为一次touch),将touch count值大的认为是热块,向前移动LRU头部,留在缓冲池中,对外提供访问。反之,向后移动LRU尾部,逐渐退出缓冲池中。(注意,缓冲块的移动并不是真正的物理移动,而是LRU链表上指针的位置的移动。)

11.缓冲和全表扫描关系

当一个数据块从磁盘中读取进缓冲中,oracle将其放到LRU链表的中间,这样touch count值大的就可以继续留在LRU热端,而当数据库进行一次大表的全表扫描,并且此次全表扫描的记录数量大小已经超出了数据块的大小,这样可能将LRU之前维护的经常访问到的数据块清除出buffer问题。

oracle解决这个问题的方法为将全表扫描进入buffer中的数据块特殊对待,即全表扫描进入buffer中的数据块会被立刻置成可重用状态。

12.缓冲池

1.缓冲池是缓冲块的集合,oracle的整个DB buffer

cache由多个缓冲池组成。可以通过手工配置缓冲池实现决定数据是留在缓冲中还是数据被使用完后立刻就可以被新的数据覆盖,以此来达到控制数据块的老化。

2.主要的缓冲池有:

default pool:普通的数据块缓冲都在该区域,若没有公共配置其他缓冲池,则默认数据库中只存在该缓冲池。

KEEP pool:该缓冲池放入想要长期存放在内存中以提供访问的数据,只有发生缓冲池空间不足时,才会将里面的数据清除。

recycle pool:该缓冲池放入不经常使用的数据。

3.每个数据库都有标准块大小,但oracle也支持创建非标准块大小的表空间,这样,buffer cache就必须支持非标准的块大小。所以,在DB buffer cache中针对不同的块大小有不同的缓冲池大小,在创建非标准块大小的表空间时,需要先修改db_nk_cache_size参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值