热点块引发的Cache buffer Chains latch:

   SQL语句即便适当进行了调优,有时也无法解决cache buffers cahins latch,若在编写SQL语句时的SQL工作方式,

只是持续扫描少数特定块,则在多个会话同时执行此SQL语句时,就会发生Hot Block引起的cache buffers chains latch争用。

测试方案如下:

1) 创建与测试相同的表和索引。

2) 即便有效扫描索引,多个会话也会反复扫描相同的块,因此发生Hot Block引起的cache buffers chains latch争用。

SQL> create or replace Procedure cbc_do_select(p_from in NUMBER,
2 p_to IN NUMBER) is
3 begin
4 -- 反复,集中扫描特定块
5 for idx in 1 .. 3000 loop
6 for x in (select id from cbc_test where id between p_from and p_to) loop
7 null;
8 end loop;
9 end loop;
10 end;
11 / Procedure created ---同时执行20个读取工作
var job_no number;
begin
for idx in 1 .. 20 loop
dbms_job.submit(:job_no,'cbc_do_select(1000,1010);');
commit;
end loop;
end; select sid,event,p1,p2,p3,p1raw from v$session where event='latch: cache buffers chains'
p1 p2 p3 p1raw
1 56 latch: cache buffers chains 758400976 150 0 000000002D3447D0 引发问题的SQL语句时select * from cbc_test where id between p_from and p_to,此SQL语句本身已经是优化的状态,因为通过cbc_test_idx索引, 只扫描必要范围并获取相应值。通过v$latch_children视图确认特定子latch使用是否偏多,从此可以间接判断是否是Hot Block引起的锁存器争用。 或者也可以捕捉v$session_wait 视图的PARAW列值,将反复被观察的值为锁存器地址利用。 SQL> SQL> SQL> SQL> select *
from (select addr, child#, gets, sleeps
from v$latch_children
where name = 'cache buffers chains'
order by sleeps desc)
where rownum <= 20 2 3 4 5 6 ; ADDR CHILD# GETS SLEEPS
-------- ---------- ---------- ----------
2D3447D0 632 22491 74
2D351280 908 1843173 15
2D341E34 575 21975 6
2D33F498 518 15291 3
2D34FA08 874 4050 1
2D331E28 226 16410 1
2D33296C 241 12922 1
2D33A2D4 407 12470 1
2D346438 670 2590 1
2D3567B0 1024 2836 0
2D3560D8 1014 2830 0 ADDR CHILD# GETS SLEEPS
-------- ---------- ---------- ----------
2D35605C 1013 3634 0
2D355EE0 1012 1187 0
2D355E64 1011 1806 0
2D355DE8 1010 1455 0
2D355D6C 1009 2011 0
2D355BF0 1008 2615 0
2D355B74 1007 3166 0
2D355AF8 1006 8798 0
2D355A7C 1005 2829 0 已选择20行。
已选择20行。 SLEEPS :
SLEEPS NUMBER Number of times a willing-to-wait latch request resulted in a session sleeping while waiting for the latch 从结果来看child# 632发生了锁存器争用,利用x$bh视图可以确认哪些块是Hot Block SQL> 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
from x$bh x
where hladdr in ('2D3447D0','2D341E34','2D351280')
order by hladdr, obj
2 3 4 5 6 7 8 9 10 11 12 13 14 ; HLADDR OBJ OBJECT_NAME DBARFIL DBABLK TCH
-------- ---------- -------------------- ---------- ---------- ----------
2D341E34 37 I_OBJ2 1 32383 9
2D341E34 288 I_JOB_JOB 1 2017 43
2D341E34 288 I_JOB_JOB 1 2017 1
2D341E34 288 I_JOB_JOB 1 2017 1
2D341E34 288 I_JOB_JOB 1 2017 1
2D341E34 288 I_JOB_JOB 1 2017 1
2D341E34 444 STATS_TARGET$ 2 852 0
2D3447D0 37 I_OBJ2 1 32375 9
2D3447D0 236 I_IDL_CHAR1 1 63207 0
2D3447D0 267 SMON_SCN_TO_TIME_AUX 2 61809 0
2D3447D0 287 JOB$ 1 2009 1 HLADDR OBJ OBJECT_NAME DBARFIL DBABLK TCH
-------- ---------- -------------------- ---------- ---------- ----------
2D3447D0 287 JOB$ 1 2009 2
2D3447D0 287 JOB$ 1 2009 2
2D3447D0 287 JOB$ 1 2009 22
2D3447D0 287 JOB$ 1 2009 1
2D351280 2 ICOL$ 1 83980 25
2D351280 37 I_OBJ2 1 44472 10
2D351280 40 I_OBJ5 1 14339 1
2D351280 68 SYN$ 1 40600 14
2D351280 159 TRIGGER$ 1 83747 1
2D351280 6213 WRH$_SQL_PLAN 2 4265 0
2D351280 75405 WRH$_SQLSTAT_INDEX 2 4498 0 HLADDR OBJ OBJECT_NAME DBARFIL DBABLK TCH
-------- ---------- -------------------- ---------- ---------- ----------
2D351280 75500 CBC_TEST_IDX 7 291882 80 已选择23行。

热点块引发的cache buffers cahins latch的更多相关文章

  1. 低效的SQL引发的cache buffers chains latch

    1.低效的SQL 低效的SQL语句时发生cache buffers chains 锁存器争用的最重要原因.多个进程同时扫描大范围的索引或表时,可能广泛 地发生cache buffers chains ...

  2. cache buffers chains latch

    cache buffers chains latch 从 Oracle 8i Database 开始, 散列锁存器<-------(1:m)------>hash bucket<-- ...

  3. cache buffers chains以及热块解决方案

    cache buffers chains以及热块解决方案 今天是2013-10-10,今天下午我调休了,中午饭过后从14点一直睡到16点,这种感觉真爽.  之前学习过关于buffer cache的ca ...

  4. 深度分析ORACLE热点块问题

    1.热点块的定义 数据库的热点块,从简单了讲,就是极短的时间内对 少量数据块进行了过于频繁的访问.定义看起来总是很简单的,但实际在数据库中,我们要去观察或者确定热点块的问题,却不是那么简单了.要深刻地 ...

  5. 【转载】latch: cache buffers chains

    本文转自惜分飞的博客,博客原文地址:www.xifenfei.com/1109.html,支持原创,分享知识! 当一个数据块读入sga区,相应的buffer header会被放置到hash列表上,我们 ...

  6. [转帖]深入理解latch: cache buffers chains

    深入理解latch: cache buffers chains http://blog.itpub.net/12679300/viewspace-1244578/ 原创 Oracle 作者:wzq60 ...

  7. latch: cache buffers chains故障处理总结(转载)

    一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓.急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当 ...

  8. latch: cache buffers chains故障处理总结

    一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓.急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当 ...

  9. 案例:latch: cache buffers chains event tuning

    前两天对oracle数据库(single instance)进行了迁移升级从10.2.0.4 升到11.2.0.3,有一个项目迁完后第二天,cpu负载升到了130更高(16cpus). 向用户询问后使 ...

随机推荐

  1. (3)tomcat源代码分析环境的搭建

    他山之石,可以攻玉. 要想了解tomcat,咱必须先搭建tomcat的环境,下载tomcat的源码,学习其架构. 1.首先是SVM  Import 2.创建新的资源库位置:http://svn.apa ...

  2. socket 网摘

    一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打 开 ...

  3. java之File

    1.文件创建.重命名.删除 code: package com.test; import java.io.File; import java.io.IOException; public class ...

  4. 搭建Android环境

    1.相关文件下载: 1.1.Java jdk下载: JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jre7-downl ...

  5. HDU 2845 Beans (DP)

    Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled ...

  6. [RxJS] Reactive Programming - Sharing network requests with shareReplay()

    Currently we show three users in the list, it actually do three time network request, we can verfiy ...

  7. java基础之成员变量与局部变量

    成员变量的含义 局部变量的含义 成员变量与局部变量的区别

  8. NFinal 揭秘之控制器

    用NFinal框架开发的项目类似于MVC的那种开发方式,有Controller层.Model层.View层,还包括表现层Web层,在NFinal开发的项目中真正执行的代码也就是Web层中的代码,Web ...

  9. (转).net程序员转战android第二篇---牛刀小试

    上篇说道如何搭建android的开发环境,这一篇我们将牛刀小试一下, 完成我们第一个android APP应用. 我就从新建项目说起吧. 首先打开Eclipse,选择顶部的File(文件)——new( ...

  10. SQL cmd 实用工具学习 -1

    启动 sqlcmd 实用工具并连接到 SQL Server 的默认实例 在"开始"菜单上,单击"运行". 在"打开"框中,键入 cmd,然后 ...