网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  oracle数据库buffer busy wait等待事件 (1)     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:80次  录入:管理员--2008-04-17  
 

【赛迪网-it技术报道】当会话意图访问缓冲存储器中的数据块,而该数据块正在被其它会话使用时产生buffer busy waits事件。其它会话可能正在从数据文件向缓冲区存储器度曲同样的数据块,或正在缓冲存储器中对其进行修改。

为了确保读取器会话拥有与获得所有更改或无更改的数据块一致的映像,正在修改该数据块的会话在其标题中标记一个标志,让其他会话知道有一个更改正在进行而等候更改的的完成。

视图v$waitstat不是owi的组件,但其为没一类缓冲区提供了有用的等待统计。遭遇buffer busy等待事件最常见的缓冲区类为块、段标题、撤消块、撤消标题。

显示一个查询v$waitstat视图的采样输出:

具体示例如下:

select * from v$waitstat where count>0;

class count time

------------------ ---------- ----------

data block 4170082 1668098

segment header 116 98

undo header 916 1134

undo block 2087 1681

1、等待参数

buffer wait busy的等待参数描述如下:

p1 在oracle 8及其以后版本的数据库里,p1显示询问数据块驻留的绝对文件号。

p2 进程需要访问的实际块号。

p3 在oracle10g以前的版本中,着是表示等待原因的数字。oracle在内河代码中在

多个地方用不同的原因码提交。该原因码取决于版本。

2、等待时间

100厘秒或1秒。

? oracle会话正在等待钉住一个缓冲区。必须在读取或修改缓冲区前将它钉住。在任何

时刻只有一个进程可以钉住一个缓冲区。

?buffer busy waits表明读/读、读/写、写/写争用。

?采取的适当措施取决于p3参数中的原因码。

在sga中读取或修改缓冲区的会话必须首先获取cache buffers chains锁存器,并且遍历

这个缓冲区链,直到他发现必需的缓冲区头。然后,他必须以共享模式或独占模式获取

一个缓冲区锁或缓冲区头上的pin,这取决于他计划的操作。一旦缓冲区头被钉住,会话

就释放cache buffers chains锁存器,并在缓冲区自身上执行计划的操作。如果无法获

取一个pin,会话就在buffer busy waits等待事件上等待。这种等待时间不会应用于在

会话的私有pga中执行的读取或写入操作。

3、诊断的原因、诊断和动作

?表示为什么进程无法获得一个缓冲区pin的主要原因码。

?buffer busy waits等待时间需要的块类。

?和buffer busy waits时间相关的sql语句。

?缓冲区所属的段。

--查找等待块类型

select 'segment header' class,

a.segment_type,

a.segment_name,

a.partition_name

from dba_segments a,

v$session_wait b

where a.header_file = b.p1

and a.header_block = b.p2

and b.event = 'buffer busy waits'

union

select 'freelist groups' class,

a.segment_type,

a.segment_name,

a.partition_name

from dba_segments a,

v$session_wait b

where b.p2 between a.header_block + 1 and (a.header_block + a.freelist_groups)

and a.header_file = b.p1

and a.freelist_groups > 1

and b.event = 'buffer busy waits'

union

select a.segment_type || ' block' class,

a.segment_type,

a.segment_name,

a.partition_name

from dba_extents a,

v$session_wait b

where b.p2 between a.block_id and a.block_id + a.blocks - 1

and a.file_id = b.p1

and b.event = 'buffer busy waits'

and not exists (select 1

from dba_segments

where header_file = b.p1

and header_block = b.p2);

◆ 带有原因码130的数据块(类#1)争用

如果buffer busy waits的等待事件主要集中在数据块(类#1)上,并且原因码130,则

表明应用程序运行在同一时刻查询相同数据集的多个会话,采用如下三件事最小化问题:

§减少并发级别或该表在运行现成直接内分区工作的方法。

§优化sql语句,减少物理读取和逻辑读取的数量。

§增加freelists和freelist groups的数量。

◆ 带有原因码220的数据块(类#1)争用

多个会话同时在相同的对象上dml。采用如下三件事最小化问题:

减少并发级别或改变划分部分的方法。

减少块中行的数量。

在另一个具有较小块尺寸的表空间中重新构建对象(oracle 9i或以上版本)。

可以使用较大的pctfree重新构建表或索引。可以使用命令改变表以最小化每个块的最

小行数:

alter table table_name minimize records_per_block;

从oracle 9i开始,可以在另外一个具有较小的块尺寸的表空间中移动或重新构建对象。

虽然这些动作可以最小化buffer busy waits问题,但是他们无疑将增加全表扫描时间

和磁盘空间利用率。常言道,世上没有免费的午餐。

◆ 数据段头(类#4)的争用

如果buffer busy waits的等待时间主要集中在数据段头(即表或索引段头,并且不是

插销段头)上,这意味着数据库中的一些表或索引具有高段头活动。如下解决问题:

增加已经确定对象的进程freelists和freelist groups的数量。

确保pctfree和pctused之间内的间隙不会太小。

确保下一个区尺寸不会太小。

如果不希望混浠freelists和freelist groups,可以依靠自动段空间管理(automatic

segment space management,assm)特性,以分散从插入语句中引入的数据(9i特性)。

◆ 撤消段都(类#17)的争用

如果buffer busy waits等待时间主要集中在撤消段头上,这表明数据库中的回滚段

过少,或者他们的尺寸太小,从而造成对段头的频繁更新。如果在oracle 9i中引入的系

统管理撤消,就不需要处理这种问题,因为oracle将根据需要增加额外的撤消段。

◆ 撤消块的争用(类#18)

如果buffer busy waits等待时间主要集中在撤消块上,这通常意味着多个并发会话同

时查询更新的数据。当应用程序可以在不同的时间内查询和dml时,这种问题就不会存在。

◆ 系统级诊断

--文件等待次数

select b.file_id,

b.file_name,

a.count

from x$kcbfwait a,

dba_data_files b

where a.indx = b.file_id-1

and a.count > 0

order by a.count;

 
 
上一篇: 详细讲解oracle数据库管理员认证方法    下一篇: 带你快速了解wait等待事件及其处理方法
  相关文档
如何在window nt系统中监测oracle进程 02-01
Oracle9i与SYBASE ASE12.5相比的几个不足 08-05
带你轻松接触oracle dblink的简单运用 03-18
带你深入了解oracle数据库的进制转换 03-11
循序渐进讲解oracle 9i数据库的迁移过程 05-14
Oracle数据库字符集转换规律全面剖析 04-11
Oracle分层管理器的技术原理及应用 04-11
建库的过程中dbca报错,错误号为ora-12547 02-27
用pipelined table实现split函数的示例 06-23
让oracle数据表不显示中文而变成问号的方法 07-24
数据变更日志记录表及触发器的自动生成脚本 03-04
讲解oracle数据库冷备份恢复的具体步骤 07-21
与基于锁的方案相比稍显复杂的非阻塞算法 02-22
在单机上创建物理oracle数据库9i standby 07-17
关闭ORACLE SERVLET ENGINE 11-12
Oracle中用LogMiner分析重做及归档日志 04-11
深入讲解阻塞现象的产生原因及处理方法 03-20
实例解析:用Oracle创建实例的参数需求 09-01
temp表空间肆意扩大无法继续扩展的现象 02-20
oralce定时执行存储过程任务的设置步骤 03-03
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息