等待模拟-BUFFER BUSY WAIT

简介: create table test_buf(id number,name char(1000))tablespace test;begin  for idx in 1.
create table test_buf(id number,name char(1000))
tablespace test;
begin 
 for idx in 1..100 loop
 insert into test_buf values(idx,'aa');
 end loop;
end;

select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),count(*) from test_buf group by dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_RELATIVE_FNO( DBMS_ROWID.ROWID_BLOCK_NUMBER(   COUNT(*)
------------------------------ ------------------------------ ----------
                             6                          23661          7
                             6                          23666          7
                             6                          23670          7
                             6                          23679          7
                             6                          23668          7
                             6                          23663          7
                             6                          23662          7
                             6                          23665          7
                             6                          23680          2
                             6                          23667          7
                             6                          23672          7
                             6                          23660          7
                             6                          23669          7
                             6                          23671          7
                             6                          23664          7
 

create or replace procedure test_buf_pr
 is 
begin 
  for n in 1..1000 loop
      for idx in 2..10 loop
        update test_buf set name='TT'
       where id=10*(idx-1);
        commit;
        end loop;
      end loop;
   end;


var job_no number;
begin 
  for idx in 1..100 loop
      dbms_job.submit(:job_no,'test_buf_pr;');
end loop;
commit;
end;

同时本会话也执行查看等待事件
execute test_buf_pr
最后可以观察到这就是UPDATE UPDATE buffer busy wait争用
select * from dba_hist_active_sess_history a,(select SID from v$mystat where rownum'Idle' order by SAMPLE_TIME desc;
是CLASS=1也就是DATA BLOCK,这个可以通过v$waitstat来查看。

   
目录
打赏
0
0
0
0
91
分享
相关文章
[20180305]手工模拟buffer busy wait.txt
[20180305]手工模拟buffer busy wait.txt --//一般出现buffer busy wait原因,主要是对热块,大量dml操作. --//一种提法:oracle读不会阻塞写,写不会阻塞读,实际上写一定程度会阻塞读,只不过时间很短罢了.
1145 0
【转】BUFFER CACHE WAIT EVENTS
文章转自:http://oracleinaction.com/buffer-cache-wait-events/
670 0
一次TIME_WAIT和CLOSE_WAIT故障和解决办法
昨天解决了一个curl调用错误导致的服务器异常,具体过程如下: 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。   在服务器的日常维护过程中,会经常用到下面的命令:   它会显示例如下面的信息: TIME_WAIT 814CLOSE_WAIT 1FIN_WAIT1 1ESTABLISHED 634SYN_RECV 2LAST_ACK 1 常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
2720 0