今天,来说说这个buffer busy waits 等待事件
当会话想要访问缓冲存储器中的数据块,而该数据块正在被其他会话使用时产生buffer busy waits 等待事件,其他会话可能正在从数据文件向缓存存储器读取同样的数据块,或正在缓存存储器中对其进行修改。
为了确保读取器会话拥有与获得所有更改或无更改的数据块一致的映像,正在修改该数据块的会话在其标题中标记一个标记,让其他会话知道有一个更改正在进行,从而等待更改的完成。从oracle 10g开始,这样的等待作为read by other session事件提交,而buffer busy waits 等待事件则表示一个会话等待其他会话完成对数据块的修改。
oracle 10g还有一个事件
buffer busy,不要把这两个事件搞混了哦,当会话在一个使用asm的数据库中访问高速缓冲区的元数据时提交buffer busy 等待事件,常见的缓冲区类别为数据块,段头,撤销块,撤销块头。
我们来了解他的参数:
1.p1 显示询问的数据块驻留的绝对文件号
2.p2 进程需要访问的实际块号
3.p3 v$waitclass视图中的类 (oracle 10g 开始表示)
SELECT time, count, class FROM V$WAITSTAT ORDER BY time,count;
可利用以下这个语句查明,哪些文件和块的等待信息:
SELECT count, file#, name FROM x$kcbfwait, v$datafile WHERE indx + 1 = file# ORDER BY count ;
利用以下这个语句,可以看到排序后的文件和块正在争用的信息
SELECT p1 "File", p2 "Block", p3 "Reason" FROM v$session_wait WHERE event='buffer busy waits' ;
解决办法:
oracle 官方建议
当会话想要访问缓冲存储器中的数据块,而该数据块正在被其他会话使用时产生buffer busy waits 等待事件,其他会话可能正在从数据文件向缓存存储器读取同样的数据块,或正在缓存存储器中对其进行修改。
为了确保读取器会话拥有与获得所有更改或无更改的数据块一致的映像,正在修改该数据块的会话在其标题中标记一个标记,让其他会话知道有一个更改正在进行,从而等待更改的完成。从oracle 10g开始,这样的等待作为read by other session事件提交,而buffer busy waits 等待事件则表示一个会话等待其他会话完成对数据块的修改。
oracle 10g还有一个事件
buffer busy,不要把这两个事件搞混了哦,当会话在一个使用asm的数据库中访问高速缓冲区的元数据时提交buffer busy 等待事件,常见的缓冲区类别为数据块,段头,撤销块,撤销块头。
我们来了解他的参数:
1.p1 显示询问的数据块驻留的绝对文件号
2.p2 进程需要访问的实际块号
3.p3 v$waitclass视图中的类 (oracle 10g 开始表示)
可利用以下这个语句查询当前块的争夺信息:
7.1 - 8.0.6 Uses one set of ID codes (mostly >1000) 8.1.5 8.1.5+ does not include a value for P3 when waiting 8.1.6 - 9.2 Uses a different set of ID codes (100-300) 10.1+ Uses the block class
SELECT time, count, class FROM V$WAITSTAT ORDER BY time,count;
可利用以下这个语句查明,哪些文件和块的等待信息:
SELECT count, file#, name FROM x$kcbfwait, v$datafile WHERE indx + 1 = file# ORDER BY count ;
利用以下这个语句,可以看到排序后的文件和块正在争用的信息
SELECT p1 "File", p2 "Block", p3 "Reason" FROM v$session_wait WHERE event='buffer busy waits' ;
解决办法:
oracle 官方建议
Block Type | Possible Actions |
data blocks | Eliminate HOT blocks from the application. Check for repeatedly scanned / unselective indexes. Change PCTFREE and/or PCTUSED. Check for 'right- hand-indexes' (indexes that get inserted into at the same point by many processes). Increase INITRANS. Reduce the number of rows per block. |
segment header | Increase of number of FREELISTs. Use FREELIST GROUPs (even in single instance this can make a difference). |
freelist blocks | Add more FREELISTS. In case of Parallel Server make sure that each instance has its own FREELIST GROUP(s). |
undo header | Add more rollback segments. |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30430420/viewspace-1788909/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30430420/viewspace-1788909/