latch: cache buffers chains故障处理总结
一大早就接到开发商的电话,说数据库的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故障处理总结的更多相关文章
- latch: cache buffers chains故障处理总结(转载)
一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓.急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当 ...
- 【转载】latch: cache buffers chains
本文转自惜分飞的博客,博客原文地址:www.xifenfei.com/1109.html,支持原创,分享知识! 当一个数据块读入sga区,相应的buffer header会被放置到hash列表上,我们 ...
- Oracle索引失效问题:WHERE C1='' OR C2 IN(SubQuery),并发请求时出现大量latch: cache buffers chains等待
问题描述: 项目反馈某功能响应时间很长,高峰期时系统整体响应很慢... 获取相应的AWR,问题确实比较严重,latch: cache buffers chains等待,因为这些会话SQL执行时间太长, ...
- 案例:latch: cache buffers chains event tuning
前两天对oracle数据库(single instance)进行了迁移升级从10.2.0.4 升到11.2.0.3,有一个项目迁完后第二天,cpu负载升到了130更高(16cpus). 向用户询问后使 ...
- 关于latch: cache buffers chains的sql优化
前段时间,优化了一些耗buffer比较多的sql,但是CPU使用率还是没下来 . 查看操作系统CPU使用率 查看awr,发现又有一条超级耗性能的sql冒出来了. 该SQL每次执行耗费3e多个buffe ...
- [转帖]深入理解latch: cache buffers chains
深入理解latch: cache buffers chains http://blog.itpub.net/12679300/viewspace-1244578/ 原创 Oracle 作者:wzq60 ...
- 又是latch: cache buffers chains惹得祸
前言 一大早,客户给我打电话说: xx,应用很慢,查询数据总是超时,让我看看... 根据多年DBA经验,首当其冲的肯定是去查询数据库在这段时间都在干嘛. 分析 导出awr报告分析 1). 数据库在此时 ...
- latch:cache buffers chains的优化思路
数据块在buffer cache存放是以linked list方式存放的.当一个session想要访问/修改buffer cache的block,首先需要通过hash算法检查该block是否存在于bu ...
- cache buffers chains latch
cache buffers chains latch 从 Oracle 8i Database 开始, 散列锁存器<-------(1:m)------>hash bucket<-- ...
随机推荐
- 单实例 winform zz
(引用了 Microsoft.VisualBasic.ApplicationServices)SingleInstanceApplicationWrapper.cs using System.Wind ...
- 细说webpack之流程篇
引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器,只需配置几个文件,加载各种 loader 就可以享受无痛流程化开发.但对于 webpack 这样一个复杂度较 ...
- linux vi快捷键大全
h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开头 W 移到下一个字的开头,忽 ...
- Project Euler 9
题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...
- Little Busters! — 并查集
题目链接:http://acm.buaa.edu.cn/problem/418/ 代码: #include<cstdio> #include<iostream> #includ ...
- Java 8 简明教程
欢迎阅读我编写的 Java 8 介绍.本教程将带领你一步步认识这门语言的所有新特性.通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和可重复注解.在这篇教程的最后 ...
- eclipse 反编译class 文件 插件-jad
1.下载 jad.exe http://pan.baidu.com/s/1i3Ga33n 2.下载jadeclipse http://pan.baidu.com/s/1bn4H1iZ 放在ecli ...
- jetty之嵌入式运行jetty
在文章什么是jetty中,提到jetty容器真正出名的地方是可以作为一个嵌入到java代码的servlet容器,即可以在java代码中实例化servlet对象并操作该对象.下面我们就先来学习 下如何把 ...
- 用LINQPad加上Tx驱动来分析log
Tx (LINQ to Logs and Traces)是微软发布的开源工具.可以用这个工具来使用LINQ分析日志,包括 Event Tracing for Windows (ETW) Event L ...
- 在Excel里如何将多个工作簿合并到一个工作簿中
在Excel里如何将多个工作簿合并到一个工作簿中 当你必须将多个工作簿合并到一个工作簿时,你遇到过麻烦吗?最让人心烦的就是需要合并的工作簿里有很多张工作表.有人能推荐方法解决这个问题吗? 利用VBA ...