热点块引发的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. 把第三方的exe程序嵌入C#界面上

    public partial class eTerm_Form : WinFormsUI.Docking.DockContent{public eTerm_Form(){InitializeCompo ...

  2. 移动互联与O2O的完美衔接

    移动互联网虽然市场颇大,前景广阔,但是由于数据过于密集,很难精准的定位所谓的目标客户群,然而O2O的线下市场却与互联网市场有极大的反差.一直觉得高校周边的小商家是最幸福的生意人,客户明确(就是本校学生 ...

  3. c语言for语句

    首先呢 for语句是由4部分组成 for(表达式1;表达式2;表达式3) 循环体: 注意 1:循环中的表达式用;隔开 表达式1通常用来呢赋初值 表达式2通常用来循环控制也就是循环条件 表达式3通常就是 ...

  4. [转载]date命令时间转换

    Linux时间戳和标准时间的互转 在LINUX系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数.如/etc/shadow里的密码更改日期和失效日期,还有代理服务 ...

  5. poj 2376 Cleaning Shifts(贪心)

    Description Farmer John <= N <= ,) cows to <= T <= ,,), the first being shift and the la ...

  6. MVC 区域模块

    mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...

  7. WebService--使用 CXF 开发 REST 服务

    现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: Web Service 那点事 ...

  8. [原创作品]html css改变浏览器选择文字的背景和颜色

    又很久没有'剥壳'了,最近在为一家公司做一个生产管理解决方案.所以都很忙.今天的话题很简单,就做一个很简单的网页特效.今天偶然浏览到一个网站,他们在选择文字时,样子不是蓝背景和白色字体那么单调,感觉这 ...

  9. cobol语言基础培训教程

    COBOL 是Common Business Oriented Language 的缩写.它不仅是商业数据处理的理想语言,而且广泛用于数据管理领域,因此COBOL 语言也被称为”用于管理的语言”. 一 ...

  10. Leetcode:linked_list_cycle

    一.     题目 给定一个链表.确定它是否有一个环.不使用额外的空间? 二.     分析 1. 空链表不成环 2. 一个节点自环 3. 一条链表完整成环 思路:使用两个指针,一个每次往前走2步,一 ...