当前位置:  数据库>oracle

Oracle Dba必须了解的buffer busy waits等待

    来源: 互联网  发布时间:2017-05-03

    本文导语: Buffer Busy Waits是怎么产生的? 作为一个Oracle Dba,如果你从未遇到过Buffer Busy Waits等待,那么你算不上一个真正的Oracle Dba。Buffer Busy Waits是Oracle 数据库非常常见的一个等待,特别是在并发写比较频繁的环境里。说起为什么会产生...

Buffer Busy Waits是怎么产生的?

作为一个Oracle Dba,如果你从未遇到过Buffer Busy Waits等待,那么你算不上一个真正的Oracle Dba。Buffer Busy Waits是Oracle 数据库非常常见的一个等待,特别是在并发写比较频繁的环境里。说起为什么会产生这个等待,首先要描述下,Oracle读写数据块的过程:

1)首先依据数据块地址计算出(HASH算法)数据块所在的HASH BUCKET。

2)根据桶的编号,计算出保护这个桶的CBC LATCH,然后申请CBC LATCH,找寻数据块在不在桶里(内存里),我们这里假设在内存里。

3)读取/修改数据块。

4)释放CBC LATCH。

以上的描述看似是非常通畅,但是存在一个问题,CBC LATCH的持有是排他的(我们暂时不考虑复杂情况:共享LATCH的持有情况),如果在排他持有CBC LATCH的情况下,读取数据块内容,那么这个LATCH的持有时间就会比较长,因为相对于LATCH的获取和释放这种CPU原子操作,读取数据块的内容是非常耗时的,因此在持有CBC LATCH的情况下,读取数据块,对于读写频繁的数据库/块,那么势必会造成CBC LATCH的争用。为了解决这个问题,Oracle引入了buffer pin(buffer lock)的功能。

我们有必要对读取数据块的内容重新做下描述,大致步骤如下:

1)首先需要判断数据块所在的HASH BUCKET。

2)然后申请CBC LATCH,定位到数据块。

3)以S/X模式获取数据块的buffer pin/lock。(读取获得s模式,修改获得x模式,S和S模式具有兼容性,S和X、X和X模式不具有兼容性)。

4)释放CBC LATCH

5)在PIN的保护下,读取/修改数据块。

6)获得CBC LATCH。

7)释放(UNPIN)BUFFER PIN(BUFFER LOCK)。

8)释放CBC LATCH。

看似步骤复杂了,CBC LATCH获取/释放了两次,可是却大大的提高了并发度。上面描述的步骤里,持有CBC LATCH的目的变得单纯,只是为了修改BUFFER的PIN模式,然后依靠PIN的模式兼容性来保护数据块,例如:S和S模式的PIN是兼容的,可以并发的读取,S和X模式是不兼容的,后来的会话需要产生等待。

虽然LATCH的持有是排他的,但是这个时间极端,引起争用的可能性不大,如果大家都是来读数据块的,那么BUFFER LOCK的S模式之间都是具有共享性的,不会产生争用。但是同一个时刻,如果一个进程以S模式持有了数据块的BUFFER LOCK,另一个进程想以X模式持有,那么就会出现争用,因为道理很简单,S模式的BUFFER LOCK和X模式的BUFFER LOCK不兼容。同理,两个同时欲修改同一个数据块的进程,也会遭遇BUFFER LOCK冲突.这个冲突以ORACLE 等待事件表示出来就是Buffer Busy Waits,也就是说Buffer Busy Waits等待的本质是buffer lock的争用导致的。

我们平时经常说读不阻塞写,写不阻塞读,那是在物理的数据块级别,在内存里,读写/写写在同一个时刻都是互相阻塞的。只有读读不阻塞。

为了方便理解,上面很多步骤做了简化,下面对某些点做些补充:

1)一旦你PIN住了一个数据块,不需要立即去UNPIN(移除PIN)它。ORACLE认为你的本次调用后还有可能去访问这个数据块,因此保留了PIN,直到本次调用结束再UNPIN。

2)Oracle在对唯一索引/undo块/唯一索引的回表/索引root、branch块的设计上,在访问(读取)的时候,获取的是共享的CBC LATCH,不需要去PIN数据块,在持有共享CBC LATCH的情况下读取数据块。可能的原因是这些块修改的可能性比较小,因此Oracle单独的采用这种机制。因此对于普通数据块的读取都是需要获取2次CBC LACTH,而对于这种特殊的数据块,只获取一次共享CBC LATCH就OK 了。

3)我们上面所说的情况都是在数据块已经存在在内存里的情况。如果数据块不在内存,有可能会产生READ BY OTHER SESSION争用等待。有时间我们再看这个等待的原因。

4)上面描述只符合10G后的版本。在10G前读读也会产生BUFFER BUSY WAITS,10G后把这方面的BUFFER BUSY WAITS归到了READ BY OTHER SESSION等待里。

5)上面的描述基本都采用了数据块这个词,更准确的表达应该是buffer block。


    
 
 

您可能感兴趣的文章:

  • Linux下安装Oracle的诀窍你了解吗
  • Oracle体系结构需要首先了解的两个概念
  • 了解学习国外公司的Oracle DBA面试试题
  • Oracle两个基本概念帮你了解体系结构
  • php iis7站长之家
  • 知识进阶 完全了解 Oracle 标签安全测试
  • 将mysql转换到oracle必须了解的50件事
  • oracle复习笔记之PL/SQL程序所要了解的知识点
  • Oracle与JSDK4.0环境变量冲突,如何解决(在线等待)?
  • 请问,我如何在unix下用c/c++连结数据(oracle)??在线等待!!!!
  • 在线等待:用子线程与ORACLE数据库建立连接的问题。
  • ORACLE安装问题,再线等待!!!
  • 寻求在Linux 8.0上安装Oracle 9i的安装文档,分不够,可以再加,在线等待。。。
  • solaris9下怎么查看oracle服务是否启动,以及怎么启动,在线等待。
  • 急!!!linux9下安装oracle9i在configuration Tool过程出现错误,在线等待,解决立即给分!
  • RedHat AS 4 安装oracle9i的时候,执行Disk1下的runInstaller后提示正在初始化虚拟机,请等待后就再无反应
  • 取Oracle数据库中的中文数据乱码的问题!!急:在线等待
  • jsp显示oracle中varchar2类型字段 在线等待
  • 请教:如何在java程序里直接执行Oracle的sql脚本,谢谢先!在线等待,有参考意见即可加分。
  • jsp连接oracle问题,再现等待,解决马上给分!
  • 请问在jsp中将系统当前时间插入到Oracle中Date字段中?(很急,在线等待)
  • jsp连接oracle的简单问题,在线等待,马上接贴!
  • 为什么我用javabean更新不了数据库?javabean,oracle高手请进!!!!!高分相赠!!!在线等待中。。。
  • 快速查出Oracle数据库中锁等待的方法
  • oracle 常见等待事件及处理方法
  • Oracle中常见的33个等待事件小结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,