【中华硕博网-全球500所高校指定报名中心】
【在职研究生】 【在职博士】 【MBA/EMBA】
  您现在的位置: 中华硕博网 > IT培训 > oracl > 系能调优 > 文章正文
站内搜索:

数据库管理:Oracle 缓冲区忙等待的原因

作者:硕博网    文章来源:中华硕博网    点击数:    更新时间:2008-5-3
中华硕博网(http://www.china-b.com)全球500所高校指定报名中心--数据库管理:Oracle 缓冲区忙等待的原因

  众多Oracle有关问题中,其中最重要的一个是缓冲区忙等待(buffer busy wait)事件。缓冲区忙等待是I/O-bound Oracle系统中最常见的现象,尤其是在Oracle STATSPACK报告的前五个忙等待的读(顺序/分散)系统中,正如:
  
  前5个定时事件
  
  align=left>                            
  
  % 总和事件            等待      时间(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性能视图。这一性能视图,如表A所示,提供了等待事件的名称,等待事件与时间的总和,以及每一事件的平均等待时间。
  
  可以通过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性能视图,如表B所示,提供了识别等待产生原因的方法。
  
  v$session_wait视图的列代表的缓冲区忙等待事件如下:
  
  P1—与等待相关的数据文件的全部文件数量
  
  P2—P1中的数据文件的块数量
  
  P3—描述等待产生原因的代码
  

[1] [2] [3] 下一页

 相关热词搜索
>>更多
  • 此栏目下没有文章