内存调整之BufferCache篇

本文介绍了Oracle Buffer Cache的工作原理及管理机制,包括其如何通过WriteList和LeastRecentUsedList来有效管理缓存数据,减少物理读取次数,并提高缓存命中率。此外还讨论了如何通过调整Buffer Cache大小来优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Buffer Cache是缓存从磁盘中读取的信息的,使得Oracle需要的信息能够在内存中找到从而避免了代价昂贵的磁盘I/O。为了实现这个目标,原则上就需要尽量确保访问频率高的信息在buffer中而不被那些很少用到的或是只有一小部分有用而却占用了大量内存的内容冲掉。而且,Buffer Cache的大小也匹配于上面描述的需求的。

为了满足上面提到的原则,就不得不了解下Oracle Buffer Cache的管理机制。BufferCache中的内存由WriteList(写链表)和Least Recent Used List(最近最少使用链表)组成。前者包含那些还没有被写道磁盘上的脏缓存,后者包括空闲缓冲区,目前正在使用的Pinned Buffer和尚未移到谢链表中的脏缓存。当Oracle访问了BufferCache中的数据,则这些数据被标识在LRU的Most Recent Used端。以避免被从BufferCache中冲掉。当Oracle需要空闲缓存时,它将从LRU的LRU端开始寻找。在找寻过程中,如发现了脏缓存,则把它移到写链表中。如搜寻超过了阀值规定允许查找的限制而仍未找到空闲缓冲时,则停止搜索,启动DBW0进程将一些脏缓冲写到磁盘上。

在执行中,有一个特性不能忽略,那就是当用户执行全表扫描的操作时,所产生的数据缓冲不会放在LRU链表的MRU端,而是放在LRU端。这是因为Oracle认为全表扫描得到的数据在以后被重用的机会很少,应尽快使其失效已被清出缓冲区,为其他更常用的数据提供空间。当然,如果用户确认这些数据是需要保留的,则可以通过表级别的声明将扫描的数据放在LRU链表的MRU端或者放在KEEP池中以获得很好的保护。前者是通过显式指定CACHE来实现,后者则通过Storage(BUFFER_POOL Keep)来实现。

一般情况下,默认的BufferCache足以应付普通的应用。如果对应用有特殊的需求且了解这些应用的特性,可以通过将特定应用获取的数据缓存在KEEP POOL中。顾名思义,KEEP池的作用是将最经常使用的表缓存到这个单独的缓冲区中,以保证访问这些最常用的表的数据时,都可以从内存中直接获的。相对应的,Recycle池则用来缓存那些不希望保存在内存中的表,如很少进行扫描或访问的表。

在Buffer Cache的调整中,有两个指标是比较重要的,那就是Physical Read Factor和Buffer Cache Hit Ratio。前者是物理读(磁盘操作)的指标,后者是buffer cache命中率的指标。基本的目标是尽量减小物理读取,而提高命中率。buffer cache size和这二者并没有强烈的因果依赖关系,一个较低的命中率并非一定是buffer cache 过小造成的。换言之,简单的增加buffer cache size并不见得可以提高命中率。类似的,一个较高的命中率也不代表buffer cache size的设置是足够的。

方法如下——>

[@more@]

通过设置不同的BufferCache size来估算物理读程度方法如下:

SELECT size_for_estimate, buffers_for_estimate, estd_physical_read_factor, estd_physical_reads
FROM V$DB_CACHE_ADVICE
WHERE name = 'DEFAULT'
AND block_size = (SELECT value FROM V$PARAMETER WHERE name = 'db_block_size')
AND advice_status = 'ON';

命中率的计算公式:

1 - (('physical reads cache') / ('consistent gets from cache' + 'db block gets from cache')

其中所取得参数值可从V$SYSSTAT动态性能视图中获得:SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ('db block gets from cache', 'consistent gets from cache', 'physical
reads cache');

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

转载于:http://blog.itpub.net/404722/viewspace-926930/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值