暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

继续buffer busy waits/log file switch。。。

扫地僧的故事 2020-07-22
2168
上一期分享了,由于系统IO性能较差,以致于数据库DBWR和CKPT进程写入慢,checkpoint迟迟不能完成,从而引发大量的buffer busy waits 和 log file switch(checkpoint incomplete)等待事件,导致数据库性能变差的案例。
这一期又是继续系列(对我来说取标题太难了。。),分享的案列又是数据库中出现大量的buffer busy waits 和 log file switch(checkpoint incomplete) 等待事件,虽然现象与上一期相同,但是根本原因却不同。
某客户反馈,某系统在10点多突然变慢,很多在线业务被阻塞,希望帮忙查下具体原因。(大家听到这个的时候,第一反应是去查什么呢?)
一、分析过程
1. 查看活动会话最高的时间段


2. 查看单次等待耗时最长的等待事件


单次等待时间最长的等待事件为buffer busy waits/log file switch(checkpoint incomplete)。
以以下这条等待为例

4332/22993这个session在等待buffer busy waits, 被9052这个session阻塞. 阻塞总时间为160秒左右.
3. 查看blocking session的等待事件
9052这个session正在等待log file switch (checkpoint incomplete), 每次等待最长20秒左右, 偶尔也有几秒钟. 看起来并不是一直被卡在log file switch上. 而是多次被卡住.

阻塞9052这个session的是lgwr进程, 主要等待control file sequential read每次的等待的时间并不长在0.2ms以下.

4. 阻塞关系总结
  • 某个在线业务进程被buffer busy waits阻塞达160

  • buffer busy waits又被正在等待log file switch(checkpoint incomplete)session阻塞(最长一次20)

  • buffer busy waits的阻塞者是LGWR
  • LGWR在读controlfile

二、总结:
1.  作checkpint时,会在数据库块上加排他的pin锁,此时前台进程又想要拿到这个pin锁对块数据进行写操作,所以就被阻塞了。
2.  等待checkpoint进程,并不一直在等一次checkpoint,而是过几秒等一次, 也就是说,checkpoint是能够正常进行的,只是切换频率太快了。
3.  平时redo量大的情况下,多数是单进程,并行处理;而这次是100个进程以上,在同时更新数据,在相同checkpont频率的情况下,阻塞时间不会这么长。

三、建议:

1.千万不要在在线业务高峰期,执行大的跑批操作。

2.适当加大redo log size 减少 log file switch的频率,能够缓解上述问题。




上一期收到很多朋友的私信,希望我继续写下去,搞一个小白友好专栏。。
特别感谢大家对我的鼓励,那我就继续写下去吧~


文章转载自扫地僧的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论