Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103654388
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-17 14:54:12

     来源:赛迪网    作者:Dylan

--查找等待块类型

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;

阅读(817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~