一大早就接到开发商的电话,说数据库的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/
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
等待事件row cache lock,latch row cache objects处理过程
增加`child cache buffers chains latch`的数量通常不会解决这个问题,因为数据块的分配是基于数据块地址和哈希链数量计算得出的,而不是根据`latch`的数量。 可以通过查看`v$session_wait`视图中的`p1raw`字段来...
### Oracle Library Cache Latch 竞争的解决 在Oracle数据库中,`Library Cache Latch`竞争是一个常见的性能瓶颈问题,通常会导致系统响应时间增加、性能下降等问题。本篇文章将详细探讨如何诊断并解决该问题。 ##...
这里以`latch: cache buffers chains`为例,它是一种常见的锁等待类型,通常与缓存块的访问有关。通过这种方式,我们可以快速定位到具体是哪些会话造成了这种类型的等待。 #### 根据hash_value查询具体SQL 有时候...
如果CPU利用率高达100%,并且等待事件显示为`latch: cache buffers chains`,这表明数据库可能需要优化其内存配置或SQL查询。解决这个问题的一种方法是通过删除并重新收集统计信息,特别是如果查询中使用了绑定变量...
例如,如果`latch: cache buffers chains`等待事件占据主导,说明可能存在缓存缓冲区链争用,影响了性能。而`CPU time`作为等待事件出现,表示Oracle进程在等待其他资源时,CPU并没有被有效利用。 通过对AWR中的...
在数据库运维和性能调优领域,处理LatchFree问题和Library cache争用是经常会遇到的难题。LatchFree指的是Oracle数据库在获取 latch时出现的争用问题, latch是数据库内存结构中的一种轻量级的串行化控制机制,用于...
- **REDO ALLOCATION LATCH**:关系到重做日志处理的速度。 ### 十、Latch SPIN_COUNT 参数的调整 Latch SPIN_COUNT 参数(在Oracle 7中称为_LATCH_SPIN_COUNT)用于控制进程在等待Latch时的自旋次数。合理设置该...
例如,针对Buffer Cache的`cache buffer chains latch`和`cache buffer lru latch`,Shared Pool的`shared pool latch`和`library cache latch`,以及Log Buffer的`redo copy latch`、`redo allocation latch`和`...
Oracle MySQL数据库故障处理应急方案是一系列针对数据库在运行过程中可能遇到的锁等待、latchfree、cachebufferchains以及librarycachelock等高资源消耗和CPU负载问题的处理方法和步骤。该方案详细描述了上述问题的...
gcc -Wall -O2 latch.c -o latch 示例用法 在端口 4443 上运行闩锁并启动 Python 服务器 ./testrun.sh 运行锁存器 ./latch ./latch > latch.log 运行 Python HTTP 服务器 cd www/ ./server.py 依赖关系 * ...
安装将Framework文件夹复制到您的项目中将Latch.LTPasscode.xib更改为<module>.LTPasscode.xib配置() 在视图控制器中创建闩锁self . latch = Latch ()self . latch . delegate = self // Make sure to add ...
流星闩锁它是一个将 Latch 服务与 Meteor 框架集成的软件包,让用户可以轻松保护自己的帐户。目录 描述Meteor 是用于构建现代 Web 应用程序的超简单环境。 它是一个允许以极快的速度创建实时应用程序的框架。 Latch ...
金丝雀闩锁基于#Latch 的#CanaryMod 访问控制插件版权所有 :copyright: 2015 Antonio Jesús Sánchez Padial执照Canary Latch是免费软件:您可以根据自由软件基金会发布的 GNU 宽松通用公共许可证(许可证的 2.1 版...
- **`cachebuffers chains`**: 如果 miss 数值较高,则可能表明 SGA 中的数据缓冲区不足或存在热点数据块。 - **`cachebuffers lru chain`**: 同样表示 SGA 中的数据缓冲区不足。 - **`shared pool`**: 关注共享...
例如,在访问缓冲区链(buffer chains)时,会涉及到`cache buffers chains` latch,用于检查缓冲区链的状态。本质上,Latch可以被视为一种锁(lock),用于控制并发访问。 #### 二、什么是Latch争用? Latch争用是指...
"Latch up测试标准" Latch up测试标准是JEDEC(Joint Electron Device Engineering Council)制定的一个工业标准,旨在确保半导体器件的可靠性和安全性。Latch up是一种电流泄露现象,当半导体器件在高温、高湿或...
#LATCH 露天安装指南这是一个 beta 锁存插件,它实现了两个功能: 闩锁(Alfresco Explorer 和 Alfresco Share) 两因素身份验证(Alfresco Share) ##先决条件Alfresco 4.2 或更高版本使用 Alfresco Community 版本...
帐户-ui-latch 一个将 Latch 服务与 Meteor 框架集成的软件包,让用户可以轻松保护自己的帐户。 这个包扩展了accounts-ui包的不同模板,以在登录下拉菜单中添加 Latch 选项。 第一次添加这个包时,会在下拉登录菜单...
- 自Oracle 8.0起,可以实现共享Latch,用于某些AQ操作(如检查缓冲区链时获取的Cache Buffers Chains Latch)。 **1.2 Mutex简介** - **定义**:Mutex是一种更高层次的同步机制,用于保护更复杂的内存结构。 - *...