等待模拟-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 where name='cache buffers chains' order by sleeps desc;

最后和X$BH连接找到对象

查看当前等待的,注意本语句只能查询本实例,RAC需要每个实例都进行。

select hladdr,

       obj,

       b.sid,

       b.sql_id,

       (select object_name

          from dba_objects

         where (data_object_id is null and object_id = x.obj)

            or data_object_id = x.obj

           and rownum = 1) as object_name,

       dbarfil,

       dbablk,

       tch,

       TIM

  from x$bh x,

   (select P1RAW,sql_id,sid from v$session where wait_class'Idle' and event='latch: cache buffers chains') b 

 where HLADDR in (select P1RAW from v$session where wait_class'Idle' and event='latch: cache buffers chains')

       and x.hladdr=b.P1RAW(+)

 order by tch desc;

 

查看系统中最为严重的

select hladdr,

       obj,

       (select object_name

          from dba_objects

         where (data_object_id is null and object_id = x.obj)

            or data_object_id = x.obj

           and rownum = 1) as object_name,

       dbarfil,

       dbablk,

       tch,

       TIM

  from x$bh x

 where HLADDR in (select addr

                    from (select *

                            from (select *

                                    from v$latch_children

                                   where name = 'cache buffers chains'

                                   order by gets desc)

                           where rownum
 order by tch desc;

 

测试:

1、建立测试表

create table cbc_test(id number,name char(100));

2、插入数据

insert into cbc_test(id,name)

select rownum,object_name from dba_objects;

insert into cbc_test

select * from cbc_test;

多执行几次

SQL> select count(*) from cbc_test;

 

  COUNT(*)

----------

    401336

3、创建索引

create index cbc_test_idx on cbc_test(id);

4、建立存储过程进行大量的扫描

create or replace procedure cbc_do_select is 

begin 

   for x in (select /*+ INDEX(cbc_test cbc_test_idx) */ * from cbc_test where id >=0) loop

   null;

end loop;

end;

5、模拟足够多的JOB

 var job_no number;

begin

  sys.dbms_job.submit(job => :job,

                      what => 'cbc_do_select;',

                      next_date => to_date('13-06-2013 10:16:04', 'dd-mm-yyyy hh24:mi:ss'),

                      interval => 'sysdate+1/2880');

  commit;

end;

6、观察

HLADDR                  OBJ        SID SQL_ID        OBJECT_NAME                                                                         DBARFIL     DBABLK        TCH        TIM

---------------- ---------- ---------- ------------- -------------------------------------------------------------------------------- ---------- ---------- ---------- ----------

000007FF1C0FCBC0      53216                          CBC_TEST                                                                                  1      72322        534 1371092084

000007FF1C7D72E8      53216                          CBC_TEST                                                                                  1      71538        529 1371092084

000007FF1C784708      53216        138 3uakn4vk92jf8 CBC_TEST                                                                                  1      75337        517 1371092080

000007FF1C0FCBC0      53216                          CBC_TEST                                                                                  1      72089        491 1371092080

000007FF1C7D72E8      53216                          CBC_TEST                                                                                  1      71305        487 1371092080

000007FF1C0FCBC0      53216                          CBC_TEST                                                                                  1      76660        469 1371092080

000007FF1C7D72E8      53216                          CBC_TEST                                                                                  1      75876        466 1371092080

000007FF1CBDB268      53216                          CBC_TEST                                                                                  1      74975        429 1371092082

000007FF1C784708      53216        138 3uakn4vk92jf8 CBC_TEST                                                                                  1      70999        422 1371092082

000007FF1C784708      53216        138 3uakn4vk92jf8 CBC_TEST                                                                                  1      75570        421 1371092082

000007FF1C784708 4294967295        138 3uakn4vk92jf8                                                                                           2        193         26 1371091585

000007FF1C784708       9091        138 3uakn4vk92jf8 WRH$_SGA_TARGET_ADVICE                                                                    3       3599          6 1371088807

000007FF1CBDB268       8999                          WRH$_SQL_SUMMARY                                                                          3       3004          4 1371045615

000007FF1C784708       4226        138 3uakn4vk92jf8 I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST                                                            3      34198          4 1371045618

000007FF1C7D72E8       8995                          WRH$_SQLTEXT                                                                              3      34504          3 1371045618

000007FF1C7D72E8        181                          C_TOID_VERSION#                                                                           1      58291          3 1371086393

000007FF1C784708         93        138 3uakn4vk92jf8 ACCESS$                                                                                   1      27386          3 1371014071

000007FF1C0FCBC0        181                          C_TOID_VERSION#                                                                           1      50399          3 1371086393

000007FF1C784708        181        138 3uakn4vk92jf8 C_TOID_VERSION#                                                                           1      14372          3 1371086393

000007FF1CBDB268        101                          I_SYN1                                                                                    1        763          2 1371045607

 

HLADDR                  OBJ        SID SQL_ID        OBJECT_NAME                                                                         DBARFIL     DBABLK        TCH        TIM

---------------- ---------- ---------- ------------- -------------------------------------------------------------------------------- ---------- ---------- ---------- ----------

000007FF1CBDB268      53100                          WRH$_SERVICE_STAT_PK                                                                      3      37941          2 1371045619

000007FF1C784708      53090        138 3uakn4vk92jf8 WRH$_PARAMETER                                                                            3      38536          2 1371045620

000007FF1C7D72E8 4294967295                                                                                                                    2        499          1 1371089114

000007FF1C0FCBC0      52856                          WRH$_SQLSTAT_INDEX                                                                        3      35288          1 1371045613

000007FF1C0FCBC0         73                          IDL_UB1$                                                                                  1      11124          1 1371014072

000007FF1C7D72E8         75                          IDL_UB2$                                                                                  1       6002          1 1370999208

 

26 rows selected

阅读(1813) | 评论(0) | 转发(0) |

0

上一篇:等待模拟-library cache shared pool 硬解析

下一篇:等待模拟-read by other session

时间: 2024-10-23 10:24:11

等待模拟-cache buffer chain的相关文章

逻辑读产生Cache Buffer Chain(简称CBC) Latch的解析

测试环境:版本11gR2 SQL> select * from v$version where rownum=1; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 一.逻辑读的过程  1.Oracle以每个块的文件号.

等待模拟-library cache shared pool 硬解析

drop table test1; create table test1 (it int); insert into test1 values(10); create table test2 as select * from test1; create table test3 as select * from test1; create table test4 as select * from test1; create table test5 as select * from test1; c

等待模拟-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

CACHE BUFFER CHAINS

出现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; 最后和X$BH连接找到对象 查看当前等待的,注意本语句只能查询

等待模拟-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';

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表明

buffer cache实验5-latch:cache buffers chain

1.CBC latch产生的原理: 一次逻辑读时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:共享锁  2:独占锁 7.释放Latch

等待模拟-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 te

ORACLE Granule 解释

原创 转载请注明出处 (学习笔记) Granule 是ORACLE SGA里面分配内存的最小单位,在NOMOUNT的阶段Granule 就会分配给SGA,Granule 分为3个状态:FREE OR invalid,initialized,allocated 如果我们的SGA小于128MB,Granule为4MB如果我们的SGA大于128MGranule为16MB.同时每个Granule包含BUFFER和BUFFER HEADER,BUFFER HEADER用来悬挂到 cache buffer