• 【转载】latch: cache buffers chains


    本文转自惜分飞的博客,博客原文地址:www.xifenfei.com/1109.html,支持原创,分享知识!

        当一个数据块读入sga区,相应的buffer header会被放置到hash列表上,我们称其这hash chains,chain在中文的意为链条或串的意思,表达就是关连性.如果一个进程想访问或修改hash chain上的block,它首先要获得”cache buffers chains” latch。

    原因一:低效率的SQL语句(主要体现在逻辑读过高)


    cache buffers chains latch很大程度与逻辑读有关,所以要观注v$sql中BUFFER_GETS/EXECUTIONS大的语句。
    同时每一个逻辑读需要一个latch get 操作及一个cpu操作,这样的sql也会很耗cpu资源。

    原因二:热块(访问过于频繁)


    找出热点块方法一:

    --找出p1raw
    select p1,p1raw from v$session_wait where event='latch: cache buffers chains';
     
    --找到对象
    SELECT /*+ RULE */
     E.OWNER || '.' || E.SEGMENT_NAME SEGMENT_NAME,
     E.PARTITION_NAME,
     E.EXTENT_ID EXTENT#,
     X.DBABLK - E.BLOCK_ID + 1 BLOCK#,
     X.TCH,
     L.CHILD#
      FROM SYS.V$LATCH_CHILDREN L, SYS.X$BH X, SYS.DBA_EXTENTS E
     WHERE X.HLADDR = '00000002576EE018'--p1raw
       AND E.FILE_ID = X.FILE#
       AND X.HLADDR = L.ADDR
       AND X.DBABLK BETWEEN E.BLOCK_ID AND E.BLOCK_ID + E.BLOCKS - 1
     ORDER BY X.TCH DESC;

    找出热点块方法二:

    --直接找出热点块
    SELECT OBJECT_NAME, SUBOBJECT_NAME
      FROM DBA_OBJECTS
     WHERE DATA_OBJECT_ID IN
           (SELECT DATA_OBJECT_ID
              FROM (SELECT OBJ DATA_OBJECT_ID, FILE#, DBABLK, CLASS, STATE, TCH
                      FROM X$BH
                     WHERE HLADDR IN (SELECT ADDR
                                        FROM (SELECT ADDR
                                                FROM V$LATCH_CHILDREN
                                               ORDER BY (GETS + MISSES + SLEEPS) DESC)
                                       WHERE ROWNUM < 10)
                     ORDER BY TCH DESC)
             WHERE ROWNUM < 10);
  • 相关阅读:
    【转】JSch
    【转】JSch
    【转】class卸载、热替换和Tomcat的热部署的分析
    关于Tomcat自动加载更新class的小技巧
    MySQL中order by中关于NULL值的排序问题
    MySQL触发器使用详解
    QuartZ Cron表达式
    JDBC的URL设置allowMultiQueries的原因
    CRT:C运行库简介
    IntelliJ IDEA安装AngularJS插件
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7082563.html
Copyright © 2020-2023  润新知