新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > Oracle教程 > 正文:教你快速的解决Oracle缓冲区忙等待事件

教你快速的解决Oracle缓冲区忙等待事件

新客网 XKER.COM 2007-10-29 来源: 同来的陌生人 收藏本文

缓冲区忙等待是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;

 

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐