正 文

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


www.7dspace.com  更新日期:2005-11-7 3:08:02  七度空间


众多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性能视图。这一性能视图,如表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查询不协调的缓冲块。

3页,页码:[1] [2] [3] 

上一篇:加速PL/SQL过程
下一篇:优化Oracle .Net配置
作者:Donald Burleson  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐