zoukankan      html  css  js  c++  java
  • 【原】Cache Buffer Chain 第四篇

    作者:david_zhang@sh 【转载时请以超链接形式标明文章】

    链接:http://www.cnblogs.com/david-zhang-index/p/3873357.html

    【测试1】低效的SQL引起的catch buffers chains 锁存器争用

    创建测试表

    1 create table cbc_test(id number,name char(100));
    2 insert into cbc_test(id,name) select rownum,object_name from dba_objects;

    创建索引

    1 create index cbc_test_idx on cbc_test(id);

    创建扫描表的procedure

    1 create or replace procedure cbc_do_select
    2 is 3 begin 4 for x in (select /*+ INDEX(cbc_test cbc_test_idx)*/ * from cbc_test where id >= 0) loop 5 null; 6 end loop; 7 end; 8 /

    同时打开2000个会话执行读取工作

    1 var job_no number;
    2 begin
    3 for idx in 1..2000 loop
    4 dbms_job.submit(:job_no,'cbc_do_select;');
    5 commit;
    6 end loop;
    7 end;
    8 /

    查看整个系统当前等待

    1 SELECT event,
    2   total_waits ,
    3   time_waited
    4 FROM v$session_event
    5 WHERE sid=
    6   (SELECT sid FROM v$mystat WHERE rownum=1
    7   )
    8 ORDER BY 3 DESC;

     结果如下:

     1 EVENT                          TOTAL_WAITS TIME_WAITED
     2 ------------------------------ ----------- -----------
     3 SQL*Net message from client             44       46352
     4 library cache lock                     202         253
     5 buffer busy waits                       56         113
     6 latch: In memory undo latch             43          86
     7 latch: cache buffers chains             33          55
     8 control file sequential read         14154          22
     9 db file sequential read                 82          18
    10 events in waitclass Other                6          11
    11 library cache: mutex X                   8          10
    12 latch: shared pool                       4           5
    13 latch: row cache objects                 1           2
    14 SQL*Net message to client               45           0
    15 Disk file operations I/O                 4           0
    16 SQL*Net break/reset to client            1           0
    17 log file sync                            1           0

    根据cache buffers chains事件,找出对应的latch地址

    1 select addr, gets, misses, sleeps
    2   from v$latch_children
    3  where name = 'cache buffers chains'
    4    and misses > 100000
    5  order by 3 desc;

    结果:

    1 ADDR                   GETS     MISSES     SLEEPS
    2 ---------------- ---------- ---------- ----------
    3 0000000124ECCBB0   10485987    5260833          0
    4 0000000124E2B5A8   20671341    9806756      27942

    根据ADDR找出关联的文件号和块号

     1 SQL> select FILE#,DBABLK,CLASS,STATE from x$bh where HLADDR='0000000124E2B5A8';
     2 
     3      FILE#     DBABLK      CLASS      STATE
     4 ---------- ---------- ---------- ----------
     5          4    3585766          1          1
     6          3       9411         20          1
     7          4    3651302          1          1
     8          4    3581428          1          1
     9          6      71918          1          1
    10          6      71918          1          3
    11          6      71918          1          3
    12          6      71918          1          3
    13          6      71918          1          3
    14          6      71918          1          3
    15          3       5073         38          0

    根据文件号和块号,找出对象名称,输入6和71918

    1 select owner, segment_name
    2   from dba_extents
    3  where file_id = &p1
    4    and &p2 between block_id and block_id + blocks - 1;

    找出的对象名称

    1 OWNER                          SEGMENT_NAME
    2 ------------------------------ ------------------------------
    3 SCOTT                           EMP_FP_IDX1

    待续。。。

  • 相关阅读:
    dotnet 新项目格式与对应框架预定义的宏
    dotnet 线程静态字段
    dotnet 线程静态字段
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取系统信息
    dotnet 通过 WMI 获取系统信息
    PHP show_source() 函数
  • 原文地址:https://www.cnblogs.com/david-zhang-index/p/3873357.html
Copyright © 2011-2022 走看看