服务器进程在扫描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-完成
原创wb94a78wq170rt0 博主文章分类:ORACLE 实例与启动分析 ©著作权
©著作权归作者所有:来自51CTO博客作者wb94a78wq170rt0的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux内存操作之free命令
在Linux操作系统中,free 命令是一个非常重要的工具,用于显示系统内存(包括物理内存和交换空间)的使用情况。
缓存 应用程序 后端 服务器 Linux -
深入学习cache--思考篇
ARMv8/ARMv9架构精选系列
v8 v9 个人博客 -
buffer cache实验10-buffer cache优化指标与总结
从
检查点 字段 链表