等待模拟-BUFFER BUSY WAIT

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来查看。

   

时间: 2024-08-27 15:24:09

等待模拟-BUFFER BUSY WAIT的相关文章

等待模拟-library cache 软解析

create table test (it int); insert into test values(10); commit; create or replace procedure do_soft_parse(p_idx in number)  is      v_value number;     v_cursor sys_refcursor;  begin     execute immediate 'alter session set session_cached_cursor=0';

RAC性能分析gc buffer busy acquire 等待事件

概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer  busy分为gc buffer busy acquire和gc buffer  busy release. gc buffer busy acquire是当session#1尝试请求访问远程实例(remote  instance) buffer,但是在session#1之前已经有相同实例上另外一个session#2请求访问了相同的buffer,并且没有完成,那

[20161214]关于Buffer Busy Waits.txt

[20161214]关于Buffer Busy Waits.txt --oracle一直在不断的改进,oracle对外宣传总是读写不会相互阻塞,实际上从内部看读读不会阻塞,写写一定会出现阻塞, --如果读写呢? 实际上写入会阻塞读取操作,这个时候读取会出现等待(以前我一直以为这时写入进程会话会出现等待事件Buffer Busy --Waits,实际上存在很大的错误!!),等待事件就是Buffer Busy Waits,还是通过测试来讲解. 1.环境: SCOTT@book> @ &r/ver

如何模拟产生CBC LATCH与buffer busy wait等待事件

数据库版本:Oracle 11.2.0.4.0 CBC latch出现的原因:   --只在逻辑读时产生 1.CBC latch保护不同的链表.不同BH   :同一LATCH下多个BUCKET被同时访问时,(一个LATCH对应多个BUCKET) 2.CBC latch保护同一链表下同一BH  :同一LATCH下同一BH被同时访问时 latch: cache buffers chains 解决方法: 1._db_block_hash_latches加大latch数量,作用是减少同一LATCH下多个

分析解决11gR2 双节点RAC环境下的gc cr block busy/gc buffer busy acquire等待

?  系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3   ?  AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了 (1)     gc buffer busy acquire排进了Top 5 Timed Foreground Events 图-1     (2)     除去DB CPU在gc buffer busy acquire之后的就是gc cr block busy了 图-2     (3)     2h21

oracle等待事件4——buffer busy wait 特别介绍

  以下内容太整理自网络,完全处于学习目的,如有侵权请及时联系我,我会立即删除.   非空闲等待之:buffer busy waits 事件参数说明: 事件号 事件名 参数一 参数二 参数三 145 buffer busy waits file# block# 9i - 原因码 10g - block class# ORACLE会话正在等待PIN住一个缓冲区,会话必须在读取或修改缓冲区之前将该缓冲区PIN住. 在任何时侯只有一个进程可以PIN住一个缓冲区. buffer busy waits表明

等待模拟-cache buffer chain

出现CACHE BUFFER CHAIN 后首先查看V$SESSION_WAIT 找到P1raw的值,此P1对应了v$latch_children addr和 x$bh 的HLADDR 然后查看v$latch_children 找到GET最高的LATCH ADDR  select * from v$latch_children where name='cache buffers chains' order by gets desc;  select * from v$latch_children

等待模拟-read by other session

表TEST是一个130M的表. create or replace procedure test_buffer_read is  begin    for x in (select * from test) loop     null;   end loop; end; var job_no number; begin    for idx in 1..20 loop       dbms_job.submit(:job_no,'test_buffer_read;'); end loop; co

buffer cache实验7:buffer busy waits-完成

1.buffer busy waits产生原理分析: 一次逻辑读时CBC latch锁及Buffer pin锁的获取和释放过程如下: 1.加Latch X 2.进入hash chain,在相应的BH上加Buffer pin S (0-->1) 3.释放Latch X 4.进行逻辑读--也就是通过BH中的buffer adderss找到数据块在内存中真实位置  ---假如读了1MS 5.加Latch X 6.释放Buffer pin S (1-->0)  0:没锁  1:共享锁 -SELECT