Buffer busy waits 当会话想要访问缓冲区中的数据块,而该数据块正在被其他会话使用时将产生Buffer busy waits事件。
其他会话可能正从数据文件向缓冲器读取同样的数据块,或正在缓冲存储器中对其进行修改。
为了确保读取器会话拥有与获得所有更改或无更改的数据块一致的映像,正在修改该数据块的会话在其标题中标记一个标志,
让其他会话知道有一个更改正在进行而等待更改的完成。
buffer busy waits事件表示一个会话等待其他会话完成对数据块的修改:
模拟:
SQL> desc test1
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
NAME CHAR(10)
SQL> select * from v$mystat where rownum<2;
SID STATISTIC# VALUE
---------- ---------- ----------
29 0 0
SQL> update test1 set id=100;
1000000 rows updated.
SQL> update test1 set id=100;
1000000 rows updated.
SESSION 52:执行select * from test1 进行全表扫描
sample_id session_id sample_time sql_id event blocking_session sql_text
995833 52 29-12月-00 07.05.08.657 上午 0zkpy7fsa27fw buffer busy waits 29 select * from test1
SQL> select name,a.PARAMETER1,a.PARAMETER2,a.PARAMETER3 from v$event_name a where name='buffer busy waits';
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------------ ---------- ------------------------------ ----------------------------------------------------------------
buffer busy waits file# block# class#
p1: 涉及等待的数据文件号
p2: 进程需要访问的块号
p3: 等待的原因码