文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
网站首页 软件下载
数码学院 网络学院
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院程序开发OracleOracle数据库缓冲区忙等待的原因解析
精品广告
推荐TOP10
·常用数据库比较
·ODBC API常用函数诠释
·提高ORACLE数据库的查询统计速度
·细化解析:Oracle使用的hints调整机制
·解析Oracle/Oracle Forms 的多用途代码
·从Oracle的FORM中调用REPORT的实用技巧
·Oracle SQL精妙SQL语句讲解
·ORACLE学习笔记--性能优化四
·ORACLE常用傻瓜问题1000问
·ORACLE常见错误代码的分析与解决之二
·深刻理解Oracle数据库的启动和关闭
·监控Oracle数据库的常用shell脚本
·Oracle在Solaris下的性能与调整简介
·通俗解说ORACLE
·数据库安全性策略
阅读TOP10
·PL/Sql循序渐进全面学习教程
·详细介绍ORACLE sqlplus命令
·Oracle SQL精妙SQL语句讲解
·我的oracle笔记一(sql语句方面)
·我的oracle笔记六(oracle优化方面)
·程序员如何掌握计算机英语
·32bit oracle 扩展SGA原理
·ORACLE UPDATE 语句语法与性能分析看法
·ORACLE常用傻瓜问题1000问
·自动调整 Oracle9i Database:Oracle SGA(1)
·Oracle PL/SQL语言初级教程之游标
·[ORACLE] SQL语句的优化方法
·ora-00604报错
·Oracle9i for windows安装1
·常用数据库比较
·oracle statspack实例(一)
·破解Oracle中国高层频繁变动之谜
·Actualtests Oracle 1Z0-032 V8.2.04
·监控Oracle数据库的常用shell脚本
·性能分析工具的使用

Oracle数据库缓冲区忙等待的原因解析

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]


众多Oracle有关问题中,其中最重要的一个是缓冲区忙等待(buffer busy wait)事件。缓冲区忙等待是I/O-bound Oracle系统中最常见的现象,尤其是在Oracle STATSPACK报告的前五个忙等待的读(顺序/分散)系统中,如前5个定时事件:                          

  
  % 总和事件            等待      时间(s)    消逝时间
  --------------------------- ------------ ----------- -----------
  db文件顺序读           2,598    7,146      48.54
  db文件分散读          25,519    3,246      22.04
  库缓冲区载入死锁          673    1,363      9.26
  CPU时间           2,154     934      7.83
  日志文件平行写          19,157     837      5.68
  

减轻缓冲区忙等待的主要方式是减少系统中的I/O,这可以通过SQL使用更少的块读(block reads,比如添加索引)的方式得以实现。即使对于一个比较大的db_cache_size,我们也可以减少缓冲区忙等待的时间。

为了能够查看整个系统的等待事件,我们可以查阅v$system_event性能视图。这一性能视图提供了等待事件的名称,等待事件与时间的总和,以及每一事件的平均等待时间。

可以通过v$waitstat视图来查询导致等待的缓冲区的类型。这一视图列出了每一缓冲区类型的等待,COUNT是类所有的等待总和,TIME是这一类所有等待的时间总和,如下所示:

  
  select * from v$waitstat;
  
   类          COUNT    TIME
  ------------------ ---------- ----------
  data block      1961113  1870278
  segment header     34535   159082
  undo header      233632   86239
  undo block        1886    1706
  

当一个session访问缓冲区的块时,就有可能产生缓冲忙等待。这一缓冲区忙等待的产生可能由以下的原因造成的:

块可能被其它的session读到缓冲区,所以session必须等待块的读入结束。

session可能有与等待的session查询不协调的缓冲块。

由于缓冲区忙等待是由不同特定的块之间的竞争而造成的,所以只能通过识别哪些块发生冲突和冲突产生的原因,你才有可能做出判断,相应的调整包括识别和消除块竞争的原因。

v$session_wait性能视图,提供了识别等待产生原因的方法。

v$session_wait视图的列代表的缓冲区忙等待事件如下:

P1—与等待相关的数据文件的全部文件数量。

P2—P1中的数据文件的块数量。

P3—描述等待产生原因的代码。

这里是一个这些值的Oracle数据词典查询:

  
  select
    p1 "File #".
    p2 "Block #",
    p3 "Reason Code"
  from
    v$session_wait
  where
    event = 'buffer busy waits';
  

如果以上查询的结果显示一个块在忙等待,以下的查询将显示这一块的名称和类型:

  
  select 
    owner,
    segment_name,
    segment_type
  from 
    dba_extents
  where 
    file_id = &P1
  and 
   &P2 between block_id and block_id + blocks -1;
  

一旦这一块被识别,v$segment_statistics性能视图促使块水平统计的实时监控。这一过程使得DBA识别与独立列表与索引有关的问题。

我们也可以查询dba_data_files以确定卷入等待的文件的file_name,方法是使用v$session_wait中的P1。

从v$session_wait中查询P3(原因编码)的值可以知道session等待的原因。原因编码的范围从0到300,并可以解码。

在一个SCUR或XCUR缓冲区产生且没有结束的改变。

0 块被读入缓冲区。

100 我们想要NEW(创建)一个块,但这一块当前被另一session读入。

110 我们想将当前块设为共享,但这一块被另一session读入,所以我们必须等待read()结束。

120 我们想获得当前的块,但其他人已经将这一块读入缓冲区,所以我们只能等待他人的读入结束。

130 块被另一session读入,而且没有找到其它协调的块,所以我们必须等待读的结束。缓冲区死锁后这种情况也有可能产生。所以必须读入块的CR。

200 我们想新创建一个block,但其他人在使用,所以我们只好等待他人使用结束。

210 Session想读入SCUR或XCUR中的块,如果块交换或者session处于非连续的TX模式,所以等待可能需要很长的时间。

220 在缓冲区查询一个块的当前版本,但有人以不合法的模式使用这一块,所以我们只能等待。

230 以CR/CRX方式获得一个块,但块中的更改开始并且没有结束。

231 CR/CRX扫描找到当前块,但块中的更改开始并且没有结束。

原因编码

正如我在开始时所说的那样,缓冲区忙等待是I/O bound系统中最常见的现象。数据块等待导致的I/O竞争通常是由当扫描相同的索引时,多个session重复读入相同的块。在这样的情况下,session 1快速扫描缓冲区的块,然后块从磁盘被读入。当session 1等待磁盘读完成过程中,其它块扫描相同的索引,并很快捕捉session 1,并想从磁盘上读入相同的块。由此产生了缓冲区忙等待。

以下规则有助于解决提及的当处于竞争时的情况:

数据块竞争—通过改变PCTFREE或者PCTUSED值来识别和消除程序中的HOT块,以减少数据块的数量。

Freelist块竞争—增加FREELISTS值,当使用Parellel服务器时,一定确保每一事例有自己的FREELIST GROUPs。

Segment header竞争—增加FREELISTS值,并使用FREELIST GROUPs。

Undo header块—增加回滚段(rollback segments)的数量。

好处

缓冲区忙等待的识别和解决是比较复杂和棘手。Oracle提供了v$segment_statistics视图有助于监视缓冲区忙等待。当能够正确地识别和修正缓冲区忙等待的原因时,你所努力的付出一定会得到回报的。

(出处:清风学院



上一篇:跟踪Oracle 9i的CPU和I/O使用代价

下一篇:Oracle在Solaris下的性能与调整简介


相关软件: 相关文章:
·Oracle数据库缓冲区忙等待的原因解析

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号