监控数据的可视化分析神器 Grafana 的告警实践
1104
2022-10-07
性能优化之等待事件free buffer waits解决方法
1.在将一个块读入到缓冲存储器之前,Oracle进程必须发现并获得用于这个块的空闲缓冲区。如果找不到LRU列表上的空闲缓冲区,或缓冲区不可用,那么会话就会在free buffer waits事件上等待。
2.DBWR进程负责在LRU列表上建立清洁缓冲区。
3.ORACLE前台进程扫描LRU列表,要到预先定义的限度才停止扫描,这个限度通常是LRU列表的一定百分比,在ORACLE9i中,这个限度是40%,这个值在视图x$kvit中可以查看到:
select * from x$kvit where kvittag = 'kcbfsp'
KVITTAG | KVITDSC | KVITVAL |
kcbfsp | Max percentage of LRU list foreground can scan for free | 40 |
如果扫描LRU列表至该限度依旧未找到合适的空闲缓冲区,前台进程则向DBWR提交,DBWR建立清洁的缓冲区,在DBWR建立清洁缓冲区的工作中,ORACLE进程在free buffer waits事件上等待。
4.ORACLE保持对每个空闲缓冲区请求的计数。可以从v$sysstat视图中查询而得:
select * from v$sysstat s where s.NAME = 'free buffer requested'
5.ORACLE保持对空闲缓冲区请求失败的次数:
select * from v$system_event s where s.EVENT = 'free buffer waits'
注:字段total_waits则表明总等待次数。
6.可以从v$sysstat视图中查询而得进程必须查看多少缓冲区以获得所要求的free buffer:
select * from v$sysstat s where s.NAMEin ('free buffer inspected','free buffer requested')
注:如果inspected数量远远大于requested数量,则意味着进程需要扫描更多的LRU列表以获得可用的缓冲区。
7.产生该等待事件的原因:
原因 | 说明 |
低效率的SQL语句 |
8.参数说明:
事件号:137
事件名:free buffer waits
参数一:ORACLE读取块的文件号file#
参数二:块号block#
参数三:LRU列表的set-id#
9.等待时间:最多1秒,然后再次查找。
扫描二维码关注我的微学堂
发表评论
暂时没有评论,来抢沙发吧~