一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓。急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当时忘了记录log,这里总结下处理思路,以便下次查看。

故障分析思路

查看等待事件,判断故障起因

SQL>select * from (select sid,event,p1,p2,p3,p1text,WAIT_TIME,SECONDS_IN_WAIT from v$session_wait where wait_class# <> 6
order by wait_time desc) where rownum
<=10;

确认为latch: cache buffers
chains引起的故障后,查看latch的命中率

SQL>SELECT name, gets,
misses, sleeps,
      immediate_gets, immediate_misses
     FROM
v$latch
   WHERE name = 'cache buffers chains';

各列名称意义如下

NAME:latch名称
IMMEDIATE_GETS:以Immediate模式latch请求数
IMMEDIATE_MISSES:请求失败数
GETS:以Willing
to
wait请求模式latch的请求数
MISSES:初次尝试请求不成功次数
SPIN_GETS:第一次尝试失败,但在以后的轮次中成功
SLEEP[x]:成功获取前sleeping次数
WAIT_TIME:花费在等待latch的时间

这里需要注意MISSES/GETS如果在达10%左右,则说明有比较严重的latch争用,也可以通过查询v$latch_children视图查看其他latch信息
,语句如下

SQL> SELECT *
    FROM
(SELECT   addr, child#, gets, misses, sleeps, immediate_gets
igets,
                  immediate_misses imiss, spin_gets
sgets
              FROM v$latch_children
             WHERE NAME = 'cache
buffers chains'
          ORDER BY sleeps DESC)
   WHERE ROWNUM <
11;

关于latch的统计信息,主要关注以下几部分

misses/gets的比率是多少

获自spinning的misses的百分比是多少

latch请求了多少次

latch休眠了多少次

查看热点对象和访问信息,TCH列表示对象被访问的次数

SQL> SELECT *
    FROM
(  SELECT addr,
                   ts#,
                  
file#,
                   dbarfil,
                  
dbablk,
                   tch
              FROM x$bh
          ORDER
BY tch DESC)
   WHERE ROWNUM < 11;

通过对象的文件号和块号查看具体对象信息

SQL>select owner,
segment_name, partition_name, tablespace_name
from dba_extents
where
relative_fno = &v_dba_rfile
and &v_dba_block between block_id and
block_id + blocks - 1;

也可以通过如下sql查找热点块,主要

SELECT *

FROM (SELECT O.OWNER, O.OBJECT_NAME,
O.OBJECT_TYPE, SUM(TCH) TOUCHTIME

FROM X$BH B, DBA_OBJECTS O

WHERE B.OBJ =
O.DATA_OBJECT_ID

AND B.TS# > 0

GROUP BY O.OWNER, O.OBJECT_NAME,
O.OBJECT_TYPE

ORDER BY SUM(TCH) DESC)

WHERE ROWNUM <= 10;

查看引起latch: cache buffers chains的sql

SQL> select * from (select

    count(*),
    sql_id,
    nvl(o.object_name,ash.current_obj#)
objn,
    substr(o.object_type,0,10) otype,
     3    4    5    6       
CURRENT_FILE# fn,
         CURRENT_BLOCK# blockn
   from 
v$active_session_history ash
       , all_objects o
   where event like
'latch: cache buffers chains'
     and o.object_id (+)=
ash.CURRENT_OBJ#
   group by sql_id, current_obj#,
current_file#,
                  current_block#,
o.object_name,o.object_type
   order by  count(*) desc )where rownum
<=10;

根据上面得到的sql_id信息查看sql全文

SQL>select sql_fulltext
from v$sqlarea where sql_id='&sqlid';

查看SQL的执行计划
SQL>SELECT * FROM
table(DBMS_XPLAN.DISPLAY_CURSOR(('&sql_id',0));

在认为sql执行计划不准确的情况也可以通过sql_id查看sql的address和hash_value查看sql的实际执行计划

SQL>SELECT  address,
hash_value FROM v$sql
     WHERE sql_id='&sql_id';
SQL>SELECT
operation, options, object_name, cost FROM v$sql_plan
     WHERE address =
'&addr' AND hash_value = 'hash_v';

当某个会话长时间持有latch时,可以通过联合v$latchholder和v$session视图查看sql信息

SQL>SELECT
s.sql_hash_value,s.sql_id,s.address, l.name
  FROM V$SESSION s, V$LATCHHOLDER
l
WHERE s.sid = l.sid;

故障处理思路

1、根据sql执行计划判断该执行计划是否正确,sql执行过长往往意味着过长时间的持有latch。

2、优化nested loop join,如果有可能使用hash join代替nested
loop join。也可以利用对热块索引进行hash分区,或者使用hash簇的方式减缓热块现象。

3、调整表的pctfree值,将数据尽可能的分布到多个块中

4、调整应用

关于热块,可以参阅笔者的如下文章

http://czmmiao.iteye.com/blog/1474472

参考至:https://sites.google.com/site/embtdbo/wait-event-documentation/oracle-latch-cache-buffers-chains

http://space.itpub.net/354732/viewspace-697317

http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/RCBCL/Default.aspx

http://blog.163.com/wghbeyond@126/blog/static/351661812010619073376/

latch: cache buffers chains故障处理总结的更多相关文章

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

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

  2. 【转载】latch: cache buffers chains

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

  3. Oracle索引失效问题:WHERE C1='' OR C2 IN(SubQuery),并发请求时出现大量latch: cache buffers chains等待

    问题描述: 项目反馈某功能响应时间很长,高峰期时系统整体响应很慢... 获取相应的AWR,问题确实比较严重,latch: cache buffers chains等待,因为这些会话SQL执行时间太长, ...

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

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

  5. 关于latch: cache buffers chains的sql优化

    前段时间,优化了一些耗buffer比较多的sql,但是CPU使用率还是没下来 . 查看操作系统CPU使用率 查看awr,发现又有一条超级耗性能的sql冒出来了. 该SQL每次执行耗费3e多个buffe ...

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

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

  7. 又是latch: cache buffers chains惹得祸

    前言 一大早,客户给我打电话说: xx,应用很慢,查询数据总是超时,让我看看... 根据多年DBA经验,首当其冲的肯定是去查询数据库在这段时间都在干嘛. 分析 导出awr报告分析 1). 数据库在此时 ...

  8. latch:cache buffers chains的优化思路

    数据块在buffer cache存放是以linked list方式存放的.当一个session想要访问/修改buffer cache的block,首先需要通过hash算法检查该block是否存在于bu ...

  9. cache buffers chains latch

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

随机推荐

  1. android 中对apache httpclient及httpurlconnection的选择

    在官方blog中,android工程师谈到了如何去选择apache client和httpurlconnection的问题: 原文见http://android-developers.blogspot ...

  2. Java如何将Exception.printStackTrace()转换为String输出

    package com.test1; import java.io.PrintWriter; import java.io.StringWriter; public class T010 { /** ...

  3. 转载--C++中struct与class

    转自:http://www.cnblogs.com/york-hust/archive/2012/05/29/2524658.html 1. C++中的struct对C中的struct进行了扩充,它已 ...

  4. [置顶]VC2013的一个bug

    [置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...

  5. [ZETCODE]wxWidgets教程三:第一个窗体程序

    本教程原文链接:http://zetcode.com/gui/wxwidgets/firstprograms/ 翻译:瓶哥 日期:2013年11月27日星期三 邮箱:414236069@qq.com ...

  6. hadoop作业调优参数整理及原理【转】

    1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘.这中间的过程比较复杂,并且利用到了内 ...

  7. Linux达人养成计划1(第2章 Linux系统安装)

    2.3 系统分区之分区与格式化 1. 分区类型 主分区:最多只能有四个. 扩展分区: 最多只能有1个. 主分区加扩展分区最多有4个. 不能写入数据,只能包含逻辑分区. 逻辑分区: 2. 格式化(高级格 ...

  8. S2SH+Hibernate search出现的问题

    一  java.lang.NoSuchMethodError: org.hibernate.engine.transaction.spi.TransactionEnvironment.getJtaPl ...

  9. 常用对象API、附加:集合补充

    基本数据类型对象包装类: 为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作. 用于描述该对象的类就称为基本数据类型对象包装类. byte——Byte short ...

  10. HttpClient4.5.2 连接池原理及注意事项

    随着微服务的流行,服务之间的http调用越来越多,遇到的问题也比较多,写这边文章的目的也是将自己遇到的坑和解决方案跟大家分享 一.为什么要用Http连接池 1.降低延迟:如果不采用连接池,每次连接发起 ...