buffer cache实验10:buffer cache优化指标与总结

标题吹的有点大了,buffer cache中的不同情况的解决内容其实在前面每一小篇里都有了,没重复粘贴了。

1.buffer cache的大小:

如16CPU,32G内存:

初步分配:

SGA_TARGET=16G  --内存一半

BUFFER CACHE=12G ---SGA的40%起,可设置到70%-80%--保守点也可以设置到10G,后期可以根据系统运行情况结合buffer pool advisory进行修改。

shared_pool=3G

当参数:statistics_level为typical 或者all;或者db_cache_advice参数设置为ON,ORACLE会根据系统负载,自动估算出当前实例的buffer cache最佳大小 --通过v$db_cache_advice;或者ASR报告中:buffer pool advisory一栏。之后可以根据建议大小结合当前系统内存使用情况设置一个合理值。

以下为我虚拟机中环境数据:--SIZE_FOR_ESTIMATE单位为M,系统当前BUFFER_CACHE大小为32M。

SYS@ bys3>select SIZE_FOR_ESTIMATE,BUFFERS_FOR_ESTIMATE,ESTD_PHYSICAL_READ_FACTOR,ESTD_PHYSICAL_READS from v$db_cache_advice;

SIZE_FOR_ESTIMATE BUFFERS_FOR_ESTIMATE ESTD_PHYSICAL_READ_FACTOR ESTD_PHYSICAL_READS

----------------- -------------------- ------------------------- -------------------

             4                  496                    2.4576              527548

             8                  992                    2.3653              507728

            12                 1488                    2.2055              473442

            16                 1984                     1.887              405072

            20                 2480                    1.3526              290349

            24                 2976                    1.1332              243258

            28                 3472                    1.0613              227818

            32                 3968                         1              214661

            36                 4464                     .9342              200530

            40                 4960                     .8871              190428

            44                 5456                     .7987              171447

            48                 5952                     .7203              154614

            52                 6448                       .66              141675

            56                 6944                     .6248              134123

            60                 7440                     .5859              125766

            64                 7936                     .5529              118684

从此视图可以看到:系统当前BUFFER_CACHE大小为32M,ESTD_PHYSICAL_READS字段是物理读的块数,ESTD_PHYSICAL_READ_FACTOR字段是物理读/逻辑读的比值,越小越好。

可以看到,BUFFER_CACHE越大,物理读块数越少,物理读/逻辑读的比值越小,所以我这实验环境是要增大BUFFER_CACHE的。可以先增加到64M,然后运行一段时间,再继续结合v$db_cache_advice视图,最终设置一个最优值。

时间: 2024-11-16 18:43:17

buffer cache实验10:buffer cache优化指标与总结的相关文章

buffer cache实验7:buffer busy waits-完成

1.buffer busy waits产生原理分析: 一次逻辑读时CBC latch锁及Buffer pin锁的获取和释放过程如下: 1.加Latch X 2.进入hash chain,在相应的BH上加Buffer pin S (0-->1) 3.释放Latch X 4.进行逻辑读--也就是通过BH中的buffer adderss找到数据块在内存中真实位置  ---假如读了1MS 5.加Latch X 6.释放Buffer pin S (1-->0)  0:没锁  1:共享锁 -SELECT

buffer cache实验5-latch:cache buffers chain

1.CBC latch产生的原理: 一次逻辑读时CBC latch锁及Buffer pin锁的获取和释放过程如下: 1.加Latch X 2.进入hash chain,在相应的BH上加Buffer pin S (0-->1) 3.释放Latch X 4.进行逻辑读--也就是通过BH中的buffer adderss找到数据块在内存中真实位置  ---假如读了1MS 5.加Latch X 6.释放Buffer pin S (1-->0)  0:没锁  1:共享锁  2:独占锁 7.释放Latch

buffer cache实验2:详解Buffer Header--DUMP buffer结合X$BH视图

Buffer Header结构图及简介 图1: buffer header:每一个数据块在被读入buffer cache时,都会先在buffer cache中构造一个buffer header,buffer header与数据块一一对应.buffer header包含的主要信息有: 1) 该数据块在buffer cache中实际的内存地址.就是上图中的虚线箭头所表示的意思. 2) 该数据块的类型,包括data.segment header.undo header.undo block等等. 3)

buffer cache实验8:free buffer waits-完成

服务器进程在扫描LRU主列时,将脏块移动到LRUW列.当扫描到一个阀值(10G/11G是40%- _db_block_max_scan_pct参数决定)时会停止扫描同时通知DBWR写脏块-写脏块完后的块重新挂载到辅助LRU列,就得到了空闲buffer. DBWR进程写脏块完成前,服务器进程等待空闲buffer时出现free buffer waits等待事件 关于物理读时找空闲BUFFER,LRUW与写脏块详细过程,详见: _db_block_max_scan_pct 参数的默认值--11.2.0

buffer cache实验6:latch:cache buffers lru chains

1.working set与Latch:cache buffers lru chain: 每个working set都具有它自己的一组LRU和LRUW链表(LRU和LRUW链表总是成对出现的). ORACLE为了提高buffer cache性能(大内存),使用了多个working set 每个working set都由一个名为"Latch:cache buffers lru chain"的latch来保护,每一个lru latch对应一个working set. 而每个被加载到buff

buffer cache实验3:lru和lruw链表

1.Buffer cache中的LRU链表概念: oracle在hash chain中未搜索到所需要的buffer时,ORACEL 服务进程会发出I/O调用,到磁盘的数据文件中读取相应数据块--除了直接路径读外,此时会将数据块的内容拷贝到buffer cache 内存中--同时会构造一个buffer header. 在将数据块拷贝到buffer cache中时,假如buffer cache是空的,直接拿一个空的内存数据块来用即可. 但是如果buffer cache中的内存数据块全都被用掉了,没有

密码错误频繁登录引发的“library cache lock”或“row cache lock”等待

密码错误频繁登录引发的"library cache lock"或"row cache lock"等待 对于正常的系统,由于密码的更改,可能存在某些被遗漏的客户端,不断重复尝试使用错误密码登录数据库,从而引起数据库内部长时间的"library cache lock"或"row cache lock"的等待,这种情形非常常见.这种现象在Oracle 10.2和11.1中体现的等待事件为:"row cache lock&q

USE HttpRuntime.Cache OVER HttpContext.Current.Cache

缓存是在ASP.NET开发中经常需要用到在技术,在使用过程中,通常会用到HttpRuntime.Cache和 HttpContext.Current.Cache.而且在使用过程中,通常会觉得这两个似乎用哪一个都行,都能达到缓存 数据的目的.那么这两个Cache到底有什么不同呢?在什么时候用哪一个比较好呢?这里谈谈我的一些了 解和看法吧. 两者的异同 先来看看msdn的解释 HttpContext.Cache : Gets the ASP.NET Cache object for the curr

Java Cache系列之Guava Cache实现详解

Guava作为Google开源出来的工具库,Google自己对Guava的描述:The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing,