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

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

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

创建测试表

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

创建索引

 create index cbc_test_idx on cbc_test(id);

创建扫描表的procedure

 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个会话执行读取工作

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

查看整个系统当前等待

 SELECT event,
total_waits ,
time_waited
FROM v$session_event
WHERE sid=
(SELECT sid FROM v$mystat WHERE rownum=1
)
ORDER BY 3 DESC;

结果如下:

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

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

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

结果:

 ADDR                   GETS     MISSES     SLEEPS
---------------- ---------- ---------- ----------
0000000124ECCBB0 10485987 5260833 0
0000000124E2B5A8 20671341 9806756 27942

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

 SQL> select FILE#,DBABLK,CLASS,STATE from x$bh where HLADDR='0000000124E2B5A8';

      FILE#     DBABLK      CLASS      STATE
---------- ---------- ---------- ----------
4 3585766 1 1
3 9411 20 1
4 3651302 1 1
4 3581428 1 1
6 71918 1 1
6 71918 1 3
6 71918 1 3
6 71918 1 3
6 71918 1 3
6 71918 1 3
3 5073 38 0

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

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

找出的对象名称

 OWNER                          SEGMENT_NAME
------------------------------ ------------------------------
SCOTT EMP_FP_IDX1

待续。。。

最新文章

  1. HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)
  2. 课程设计 --- 黑白棋中的 AI
  3. MySQL中的两种临时表
  4. vs2015 企业版 专业版 密钥
  5. CMMI整体理解
  6. Linux 每天自动备份mysql数据库的方法
  7. 关于常用却忘记的css,jQuery
  8. Address Book(地址薄)
  9. Oracle批量执行脚本文件
  10. sql基本语法
  11. Jupyter-notebook 不自动打开浏览器解决办法
  12. Selenium定位不到元素的解决方法—iframe挡住了去路
  13. Day 18 常用模块(二)
  14. <数据结构基础学习>(一)数组
  15. KafkaManager对offset的两种管理方式
  16. C#_面试
  17. Django入门项目实践(中)
  18. 7. 集成学习(Ensemble Learning)Stacking
  19. C++ 模板 template
  20. Oauth2.0(二):开放平台

热门文章

  1. binary-tree-level-order-traversal I、II——输出二叉树的数字序列
  2. binary-tree-maximum-path-sum——二叉树任意一条路径上的最大值
  3. HBase写请求分析
  4. 记录一次在 VirtualBox的添加共享windows文件后,发现没有共享文件的事
  5. 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)
  6. macos下查看用户组,以及修改文件权限
  7. ElasticSearch(九)基于version进行乐观锁并发控制
  8. 5.JavaScript改变样式,验证用户输入
  9. node.js npm 安装spm失败,竟然是版本的问题
  10. CRM 安装不规范,亲人两行泪