等待模拟-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来查看。

   
相关文章
|
SQL 前端开发 rax
被误读的buffer busy waits
uffer busy waits的等待事件网上资料很多,很多人可能误读了buffer busy waits。puber们把你们对buffer busy waits等待事件的理解统统说出来,大家一起讨论学习,共同进步! 最好有实验步骤加以验证,可以让大家完完全全的彻底理解buffer busy waits。
|
弹性计算 网络协议 Java
记一次time_wait & close_wait的讨论总结
记一次time_wait & close_wait的讨论总结
记一次time_wait & close_wait的讨论总结
|
SQL NoSQL Oracle
[20180305]手工模拟buffer busy wait.txt
[20180305]手工模拟buffer busy wait.txt --//一般出现buffer busy wait原因,主要是对热块,大量dml操作. --//一种提法:oracle读不会阻塞写,写不会阻塞读,实际上写一定程度会阻塞读,只不过时间很短罢了.
1136 0
|
Java 数据库管理 关系型数据库
|
SQL 关系型数据库 Oracle