WEB开发网
开发学院数据库Oracle Oracle数据库缓冲区忙等待的原因解析 阅读

Oracle数据库缓冲区忙等待的原因解析

 2007-05-09 12:12:58 来源:WEB开发网   
核心提示: 0 块被读入缓冲区,100 我们想要NEW(创建)一个块,Oracle数据库缓冲区忙等待的原因解析(3),但这一块当前被另一session读入,110 我们想将当前块设为共享,Oracle提供了v$segment_statistics视图有助于监视缓冲区忙等待,当能够正确地识别和修正缓冲区

0 块被读入缓冲区。

100 我们想要NEW(创建)一个块,但这一块当前被另一session读入。

110 我们想将当前块设为共享,但这一块被另一session读入,所以我们必须等待read()结束。

120 我们想获得当前的块,但其他人已经将这一块读入缓冲区,所以我们只能等待他人的读入结束。

130 块被另一session读入,而且没有找到其它协调的块,所以我们必须等待读的结束。缓冲区死锁后这种情况也有可能产生。所以必须读入块的CR。

200 我们想新创建一个block,但其他人在使用,所以我们只好等待他人使用结束。

210 Session想读入SCUR或XCUR中的块,如果块交换或者session处于非连续的TX模式,所以等待可能需要很长的时间。

220 在缓冲区查询一个块的当前版本,但有人以不合法的模式使用这一块,所以我们只能等待。

230 以CR/CRX方式获得一个块,但块中的更改开始并且没有结束。

231 CR/CRX扫描找到当前块,但块中的更改开始并且没有结束。

原因编码

正如我在开始时所说的那样,缓冲区忙等待是I/O bound系统中最常见的现象。数据块等待导致的I/O竞争通常是由当扫描相同的索引时,多个session重复读入相同的块。在这样的情况下,session 1快速扫描缓冲区的块,然后块从磁盘被读入。当session 1等待磁盘读完成过程中,其它块扫描相同的索引,并很快捕捉session 1,并想从磁盘上读入相同的块。由此产生了缓冲区忙等待。

以下规则有助于解决提及的当处于竞争时的情况:

数据块竞争—通过改变PCTFREE或者PCTUSED值来识别和消除程序中的HOT块,以减少数据块的数量。

Freelist块竞争—增加FREELISTS值,当使用Parellel服务器时,一定确保每一事例有自己的FREELIST GROUPs。

Segment header竞争—增加FREELISTS值,并使用FREELIST GROUPs。

Undo header块—增加回滚段(rollback segments)的数量。

好处

缓冲区忙等待的识别和解决是比较复杂和棘手。Oracle提供了v$segment_statistics视图有助于监视缓冲区忙等待。当能够正确地识别和修正缓冲区忙等待的原因时,你所努力的付出一定会得到回报的。

上一页  1 2 3 

Tags:Oracle 数据库 缓冲区

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接