关于latch: cache buffe…
来源:互联网 发布:淘宝联盟推广没有图片 编辑:程序博客网 时间:2024/06/05 05:11
一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓。急匆匆的赶到现场发现进行了基本的检查后发现是latch:cache buffers chains作祟,处理过程还算顺利,当时忘了记录log,这里总结下处理思路,以便下次查看。
故障分析思路:
查看等待事件,判断故障起因
SQL>select * from(select sid,event,p1,p2,p3,p1text,WAIT_TIME,SECONDS_IN_WAIT fromv$session_wait where wait_class# <> 6
order by wait_time desc) where rownum <=10;
确认为latch: cache bufferschains引起的故障后,查看latch的命中率
SQL>SELECT name,gets, misses, sleeps,
各列名称意义如下
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 *
关于latch的统计信息,主要关注以下几部分
misses/gets的比率是多少
获自spinning的misses的百分比是多少
latch请求了多少次
latch休眠了多少次
查看热点对象和访问信息,TCH列表示对象被访问的次数
SQL> SELECT *
通过对象的文件号和块号查看具体对象信息
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 *
查看引起latch: cache buffers chains的sql
SQL> select * from(select
根据上面得到的sql_id信息查看sql全文
SQL>selectsql_fulltext from v$sqlarea where sql_id='&sqlid';
查看SQL的执行计划
SQL>SELECT * FROMtable(DBMS_XPLAN.DISPLAY_CURSOR(('&sql_id',0));
在认为sql执行计划不准确的情况也可以通过sql_id查看sql的address和hash_value查看sql的实际执行计划
SQL>SELECT
SQL>SELECT operation, options, object_name, cost FROMv$sql_plan
当某个会话长时间持有latch时,可以通过联合v$latchholder和v$session视图查看sql信息
SQL>SELECTs.sql_hash_value,s.sql_id,s.address, l.name
WHERE s.sid = l.sid;
故障处理思路
1、根据sql执行计划判断该执行计划是否正确,sql执行过长往往意味着过长时间的持有latch。
2、优化nested loop join,如果有可能使用hash join代替nestedloop 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
- 关于latch: cache buffe…
- 关于mysql query cache和memcached…
- Cannot send session cache limite…
- Cannot send session cache limite…
- 关于alter system switch lo…
- oracle latch工作原理
- Cache-Control: no-cache,Cac…
- 实验1 :关于FLASHBACK DATABASE …
- 关于cache buffers chain latch
- 关于 adding a new disk or removi…
- Cache As Ram
- Cache As Ram
- Cache buffers chains&n…
- High "Library Cache&nb…
- 关于pthread_cleanup_push() …
- 关于Context []startup fail…
- 关于udelay(); mdelay(); ndelay()…
- 关于udelay(); mdelay(); ndelay()…
- bzoj 1005 prufer编码+排列组合+高精
- SP2-0618: Cannot find&…
- 常用SQLPLUS快捷修改语句
- 链表实现多项式的加减乘求导
- BFS
- 关于latch: cache buffe…
- ASM磁盘头信息损坏和修复(kfed/dd)
- 将博客搬至CSDN
- 给所有开发者的React Native详细入门指南
- Android进阶——自定义View之View的绘制流程及实现onMeasure完全攻略
- Imageloader中的Application中的配置
- 算法---简单选择排序法
- 获得目标文件夹里的所有的文件名
- mysql外键设置不成功问题