• 共享池之六:shared pool latch/ library cache latch /lock pin 简介


    latch:library cache --desc v$librarycache;

    latch:library cache用于保护hash bucket.
    library cache lock保护HANDLE。
    library cache pin保护library cache object--LCO.
    从10G开始,library cache lock和library cache pin被MUTEX部分取代。暂时不讨论MUTEX。
    latch:library cache的数量:
    SYS@ bys3>select name from v$latch_children where name like '%librarycache%';
    隐含参数:_kgl_bucket_count,默认值大于等于系统中CPU个数的最小素数-不超过67。查询时会显示为0--BUG。
    一个latch:library cache管理着多个librarycache buckets.

    latch:library cache多是因为局部latch:library cache访问比较频繁,增大其数量并不能解决。
    如果shared pool过小,也会引发librarycache latch竞争,进而引起shared pool latch竞争---参考AWR--Shared Pool Advisory
    具有高version_count的SQL也容易导致latch:library cache,因为在搜索到子LCO前会一直持有latch:library cache。
    #########

    library cache lock保护HANDLE--父游标和子游标的handle

    在硬解析时,需要以独占模式(EXCLUSIVE)持有librarycache lock和library cache pin。
    进程访问LCO,首先需要在latch:librarycache的保护下获得library cache lock,才能访问和修改HANDLE;然后获取library cache pin,才能访问和LCO。
    子游标的HANDLE和LCO的访问和上面一样。

    MODE有三类: null 1;shared 2;exclusive 3;  

    null 1;空锁:空锁和独占锁互相不阻塞,主要起“标记”目的。标记对象正在使用中,或者标记对象以后还会用。保证对象内存不会被覆盖或释放。--可以执行三次,查看
    select kglhdadr,kglhdpar,kglhdlmd,kglobhs0,kglobhd0,kglobhd6 from x$kglob wherekglnaobj like 'select * from aaa';
    查看游标是否关闭。执行不大于3次,不会缓存,如有其它语句,则将未缓存的清空。
    select * from bys.dept 执行三次,
    SYS@ bys3>select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhd0,kglobhd6from x$kglob where kglnaobj like 'select * from bys.dept';
    KGLHDADR KGLHDPAR   KGLHDLMD   KGLHDPMD  KGLOBHS0 KGLOBHD0 KGLOBHD6
    -------- -------- ---------- ---------- ---------- -------- --------
    2499B1C0 24965DB4          1         0       4372 246C5CE0 252F0DD0  ----被缓存的子游标,
    24965DB4 24965DB4         1         0       4500 23CC848C 00
    被缓存的游标:当内存不足时,子游标堆6可以被覆盖,其它HADNLE等不可被覆盖。--原因是:重建执行计划的信息--父堆0,子堆0等都有可以快速重建执行计划-也算硬解析,但是消耗资源比正常硬解析少。

    等待事件的P1 P2 P3分别是:

    P1=HANDLE ADDRESS
    P2=LOCK/PIN ADDRESS
    PS=MODE*100+NAMESPACE
    NAMESPACE分以下类型:
    1.SQL AREA
    2.TABLE/PROCEDURE/FUNCTION/PACKAGE HEADER
    3.PACKAGE BADY
    4.TRIGGER
    5.INDEX
    6.CLUSETER
    7.PIPE
    13.JAVA SOURCE
    14.JAVE RESOURCE
    32.JAVA DATA

    常见的library cache lock持有模式的情况:

    以独占持有的语句是:
    ALTER TABLE……,
    CREATE OR REPLACE PROCEDURE;
    共享模式持有:SQL解析阶段
    在SQL执行阶段,由共享模式转换为NULL。
    定位引起library cache lock等待事件的语句:
    select b.sid from x$kgllk a,v$session b where a.kgllkhdl in (select p1raw fromv$session_wait where wait_time=0 and event='library cache lock') and a.kgllkmod<>0and b.saddr=a.kgllkuse;

    常见的library cache pin持有模式的情况:

    以独占模式持有的是:
    ALTER PROCEDURE ..COMPLE;
    硬解析产生执行计划过程中需要
    以共享模式持有的是:SQL执行阶段、PROCEDURE执行阶段。
    定位引起library cache pin等待事件的会话:
    select a.sid from x$kglpn b,v$session a where b.kglpnhdl in (select c.p1rawfrom v$session_wait c where c.wait_time=0 and c.event like 'library cachepin%') and b.kglpnmod<>0 and a.saddr=b.kglpnuse;

    zhuanzai :http://blog.csdn.net/haibusuanyun/article/details/21277495

  • 相关阅读:
    windows上npm yarn.ps1,因为在此系统上禁止运行脚本
    windows批量启动服务
    Typora极简教程
    Markdown修改字体颜色
    markdown锚点
    R语言报错long vectors not supported yet qap_encode.c 36
    MAC OS 解决R语言locale问题
    Java调用R语言
    MQL4编程—值传递和引用传递
    二分法查找
  • 原文地址:https://www.cnblogs.com/future2012lg/p/4192989.html
Copyright © 2020-2023  润新知