latch: cache buffers chains故障处理总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了latch: cache buffers chains故障处理总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3336字,纯文字阅读大概需要5分钟。
内容图文
![latch: cache buffers chains故障处理总结](/upload/InfoBanner/zyjiaocheng/1016/a8f01ba1a0be4823b569100b83e067cf.jpg)
latch: cache buffers chains故障处理总结
oracle 版本:10.2.0.5.0
一、故障分析思路
1、查看等待事件,判断故障起因
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;
2、确认为latch: cache buffers chains引起的故障后,查看latch的命中率
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信息 ,语句如下
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的统计信息,主要关注以下几部分:
A> misses/gets的比率是多少
B> 获自spinning的misses的百分比是多少
C> latch请求了多少次
D> latch休眠了多少次
3、查看热点对象和访问信息,TCH列表示对象被访问的次数
SELECT *
FROM (SELECT addr, ts#, file#, dbarfil, dbablk, tch
FROM x$bh
ORDER BY tch DESC)
WHERE ROWNUM < 11;
通过对象的文件号和块号查看具体对象信息
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;
4、查看引起latch: cache buffers chains的sql
select *
from (select count(*),
sql_id,
nvl(o.object_name, ash.current_obj#) objn,
substr(o.object_type, 0, 10) otype,
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;
5、根据上面得到的sql_id信息查看sql全文
select sql_fulltext from v$sqlarea where sql_id = ’&sqlid’;
查看SQL的执行计划
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR((’&sql_id’, 0));
在认为sql执行计划不准确的情况也可以通过sql_id查看sql的address和hash_value查看sql的实际执行计划
SELECT address, hash_value FROM v$sql WHERE sql_id = ’&sql_id’;
SELECT operation, options, object_name, cost
FROM v$sql_plan
WHERE address = ’&addr’
AND hash_value = ’hash_v’;
6、当某个会话长时间持有latch时,可以通过联合v$latchholder和v$session视图查看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、调整应用
内容总结
以上是互联网集市为您收集整理的latch: cache buffers chains故障处理总结全部内容,希望文章能够帮你解决latch: cache buffers chains故障处理总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。