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等待事件
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实战攻略》









你可能感兴趣的:(buffer cache实验8-free buffer waits-完成)