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.4

P_NAME                                   P_DESCRIPTION                                      P_VALUE                        ISDEFAULT ISMODIFIED ISADJ

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

_db_block_max_scan_pct                   Percentage of buffers to inspect when looking for ree  40                             TRUE      FALSE  FALSE

引起争用的场景及解决思路:

低效SQL-需要更多无关的数据块,需要更多buffer,容易出现free buffer waits等待事件

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/storage/

buffer cache小不够用--就是内存小buffer cache给的空间小,是实实在在的不够用,考虑增大buffer cache。

DBWR写的性能差--可能是数据库的主机CPU资源紧张,DBWR进程工作慢,或者I/O慢,影响写入速度,或者是CPU和I/O都没问题,可以考虑增大DBWR进程数量。

因为DBWR进程写脏块到数据文件时,会以独占模式占用脏缓冲区,此时有其它进程要读取或修改脏缓冲区,需要等待DBWR写数据完成,此时会出现write complete waits等待。

判断DBWR/存储性能导致此类问题的步骤:

磁盘繁忙程度

磁盘响应时间--大I/0不超过20MS,小I/O不超过5MS

IOPS是否正常--每盘150左右

存储CACHE是否正常--这个偶尔会出现

和存储相关的硬件是否正常运行

-------如磁盘正常,要考虑增加DBWR进程数量--一般不能超过CPU数量。

free buffer waits等待常由应用--低效SQL引起

write complete waits等待常由存储性能引起。   --此段来自周亮《ORACLE DBA实战攻略》

时间: 2024-08-03 10:14:24

buffer cache实验8:free buffer waits-完成的相关文章

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实验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为typ

buffer cache实验9:从buffer caceh中读取数据块解析-从逻辑读到物理读

先来张大图: 所用SQL语句: BYS@ ocm1>select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,deptno from bys.test;     FILE#     BLOCK#     DEPTNO ---------- ---------- ----------         4        391         10 就以上图为例,文字描述

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实验1:内存结构图解

1.为什么要使用buffer cache??? buffer cache就是一块含有许多数据块的内存区域,这些数据块主要都是数据文件里的数据块内容的拷贝. 从buffer cache中读取一个数据块一般需要100ns左右,从一般的存储硬盘中读取一个数据块需要10ms:所以大概算一下,从内存中读取数据块比从硬盘中快近十万倍. 故oracle在读取数据块时,先在buffer cache中查找,如存在,则读取--逻辑读:如果数据块不存在,则发生物理读,从物理文件中将数据读入buffer cache(不

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实验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实验4

ckptq的工作机制与增量检查点及fast_start_mttr_target参数 1.检查点概念--chkpoint 检查点是一个数据库事件,存在的意义在于减少崩溃恢复crash recovery时间. 检查点事件由后台进程CKPT触发,当检查点发生时,CKPT通知DBWR进程将脏数据库dirtybuffer写出到数据文件上,更新数据文件头及控制文件上的检查点信息. 数据文件头的SCN是CHECKPOINT SCN. 检查点工作原理: 在数据库中,进行数据修改时,需要先将数据读和内存中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中的内存数据块全都被用掉了,没有