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

运维日记丨从Buffer busy wait事件了解oracle的读块方式

新运维新数据 2022-02-26
500

各位新朋友~记得先点蓝字关注我哦~


我们经常可以看到数据库在繁忙的时候,会有一个叫Buffer busy wait的等待事件,并且AWR的时间模型也经常能看到buffer busy wait的身影,那么到底什么是Buffer busy wait呢,今天小编来给大家好好说一说这个oracle的经典等待事件!


什么是buffer?

其实在oracle数据文件中最小的单位就是block, 而用户读取block数据时,oracle就会将block的数据放入缓存,那么缓存中对应block的单位就叫buffer了, block的大小与buffer大小是一样的。那么buffer busy wait可以理解为数据块的繁忙等待


在oracle的SGA中有一块区域叫做Database buffer cache(数据库高速缓冲区),数据库为了减少对IO损耗,会把一部分的数据块存储在这块缓冲区域中,当一个事务需要访问的数据刚好在Database buffer cache中,那就可以减少IO的损耗。


Database buffer cache工作原理是什么呢?

首先,当一个数据块从磁盘读取到内存中,该块的块头(buffer header)会放置在Hash bucket里的链表中。

如上图所示


当一个事务需要访问数据块时,对要访问的数据块做一个hash运算,得出HV(hash value),再根据得出的HV从HASH表中找到对应的Hash bucket,去搜索存储在bucket中的Cache Buffers Chain链表,找到一样的BH之后,根据BH(buffer header)中记录的BA(buffer address)找到想要的块。这就是 Oracle 逻辑读的过程。


如果搜索 Bucket 后的链表,没有找到一样的 BH,那就证明 buffer Cache 中不包含目标块,就只能进行物理读了(从磁盘中读取数据块)


这里我们需要格外知道的是在遍历Cache Buffers Chain链表的时候,当然不允许有别的事务对hash 链表进行访问或者更改,此时会有一个latch(闩锁)直到找到想要的块时,才会释放。


实现原理

这时候,就会有人问了,那如果有大量的事务要对这个块做访问或者更改操作呢?


根据访问的方式,oracle会对BH进行加锁(锁:buffer pin),如果是读,则修改BH中的buffer pin锁为S(share)模式(之前为0,无锁)。如果是写,则修改为X。那么另一个事务想要修改同一个块中的数据时,就会产生等待,而这个等待就是Buffer busy wait。

获得pin 锁的会话才会根据记录在上面的BA(buffer_address)定位到我们要访问的buffer(block)获得我们想要的数据。


接下来,我们再往下延伸。每一个BH里都有两张列表,一张为users list:用来记录当前有哪些会话获得了此buffer 上的buffer pin,并记录pin的模式。另一张为waiter list 用来记录哪些会话在等待此buffer上的buffer pin,并记录pin的模式

举一个例子,当session1 想要修改block1,此时block的BH上面的users list就会记录以下信息

sid  hold mode  

1  x

当session2想要修改block1,但是由于目前block1上的pin为X,不能共享,那此时会再waiter list列表上记录,此时我们可以在后台看到就出现了buffer busy wait的等待事件

sid  req mode  

2   x


总结

简单地来说就是有多个会话都想以不兼容的模式(DML操作)获得同一个block的buffer pin的时候,就要排队等待,就会产生buffer busy wait!


美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。


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

评论