Cache Buffers Chains解决思路一


        Latch free相对来说是Oracle性能调优的一个难点,主要是定位造成CBC的语

句,国外数据库专家对latch造诣比较深的是andreynikolaev,Tanel Poder等。

以下是解决该问题的一个思路:

1、查看v$event_name中latch: caches buffers chain中p1,p2和p3值

      p1: address;  p2: number; p3: tries

2、通过ASH查看发生CBC最多的latch地址

select * from (
    select  event,
                 trim(to_char(p1, 'xxxxxxxxxx')) latch_addr,
                 trim(round(ratio_to_report(count(*)) over ()*100, 1)) ||' % '  PCT,
                 count(*)
     from v$active_session_history
     where
         event = 'latch: cache buffers chains'
      and session_state =' WAITING'
      group by event, p1
      order by count(*) desc
     )
 where rownum <10;

输出结果关注等待latch的LATCH_ADDR地址。

3、tanlepoder提供了latchprofx脚本,见附件
        (将附件latchprox.jpg改成latchprox.sql)

SQL>@latchprofx.sql sid, name,sqlid, object % "&latch_addr' 10000  --采样率

脚本内使用视图:

x$ksuprlat   :关于当前latch holder信息,
                        Kernel Service, User ,Process LATch holder

x$ksuse: 关于session信息: Kernel Service User SEssion

x$ksllw: latch 内容: Kernel Service Latch context Where

输出结果中,我们关注object地址,可以知道是哪个对象,SQLID可以知道是什么

语句。

4、查找文件和数据块对象

select dbms_utility.data_block_address_file(to_number('&object', 'xxxxxxx') file#,
        dbms_utility.data_block_address_block(to_number('&object', 'xxxxxxx') blk#
from dual

知道了文件和数据块,我们一种方法用dump block方式知道具体是哪个对象,或者
用传统的dba_extents (但该方法查询速度非常慢),或者使用x$BH等方式。查出对应的对象名是什么。

5、通过SQLID查看v$sqlarea,或v$SQL方法获得完整的SQL语句

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

6、通过dbms_xplan.display_cursor脚本(参看前面文章“Oracle 10中如何使用
dbms_xplan分析执行计划”)

列出完整的执行计划。我们通过执行计划重点关注步骤4查出的对象名称

大部分情况下,CBC是改变SQL执行计划,通常造成该问题执行计划显现NL,filter问题。优化该语句基本能解决该问题。






fj.pnglatchprofx.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/354732/viewspace-697317/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/354732/viewspace-697317/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值