library cache pin

扫码查看
  +++++++++++++++++Example++++++++++++++++++SQL> SELECT sid, event, p1raw, seconds_in_wait, wait_time  2    FROM v$session_wait  3   WHERE event = 'library cache pin'  4     AND state = 'WAITING'  5   order by p1raw  6  ;        SID EVENT                                                            P1RAW    SECONDS_IN_WAIT  WAIT_TIME---------- ---------------------------------------------------------------- -------- --------------- ----------       126 library cache pin                                                3C29DD94             539          0       193 library cache pin                                                3C29DD94           11094          0 SQL> SQL> select a.sid,a.SERIAL#,a.username,a.program  2  from v$session a,x$kglpn b  3  where a.saddr=b.kglpnuse and b.kglpnhdl = '3C29DD94' and b.KGLPNMOD0  4  ;        SID    SERIAL# USERNAME                       PROGRAM---------- ---------- ------------------------------ ----------------------------------------------------------------        24       1561 BCOE_1                      Bcod101A.exe SQL> SQL> select c.SQL_TEXT  2  from v$sqlarea c, v$session d  3  where c.ADDRESS= d.SQL_ADDRESS  4  and d.sid=24;   SQL_TEXT-------------------------------------------------------------------------------- SQL> alter system kill session '24,1561';   +++++++++++++++不同的操作会对对象请求不同的lock/pin1、所有的DDL都会对被处理的对象请求排他类型的lock和pin2、当要对一个过程或者函数进行编译时,需要在library cache中pin该对象。在pin该对象以前,需要获得该对象handle的锁定,如果获取失败,就会产生library cache lock等待。如果成功获取handle的lock,则继续在library cache中pin该对象,如果pin对象失败,则会产生library cache pin等待。如果是存储过程或者函数,可以这样认为:如果存在library cache lock等待,则一定存在library cache pin等待;反过来,如果存在library cache pin等待,不一定会存在library cache lock等待;但如果是表引起的,则一般只有library cache lock等待,则不一定存在library cache pin。可能发生library cache pin和library cache lock的情况:1、在存储过程或者函数正在运行时被编译。2、在存储过程或者函数正在运行时被对它们进行授权、或者移除权限等操作。3、对某个表执行DDL期间,有另外的会话对该表执行DML或者DDL。4、PL/SQL对象之间存在复杂的依赖性每个想使用或修改已经locked/pin的对象的SQL语句,将会等待事件'library cache pin'或'library cache lock'直到超时.超时,通常发生在5分钟后,然后SQL语句会出现ORA-4021的错误.如果发现死锁,则会出现ORA-4020错误。"library cache pin" 是用来管理library cache的并发访问的,pin一个object会引起相应的heap被载入内存中(如果此前没有被加载),Pins可以在三个模式下获得:NULL,SHARE,EXCLUSIVE,可以认为pin是一种特定形式的锁.当Library Cache Pin等待事件出现时,通常说明该Pin被其他用户已非兼容模式持有."library cache pin"的等待时间为3秒钟,其中有1秒钟用于PMON后台进程,即在取得pin之前最多等待3秒钟,否则就超时."library cache pin"的参数如下,有用的主要是P1和P2:                P1 - KGL Handle address.                P2 - Pin address                P3 - Encoded Mode & Namespace"LIBRARY CACHE PIN"通常是发生在编译或重新编译PL/SQL,VIEW,TYPES等object时.编译通常都是显性的,如安装应用程序,升级,安装补丁程序等,另外,"ALTER","GRANT","REVOKE"等操作也会使object变得无效, 可以通过object的"LAST_DDL"观察这些变化.当object变得无效时,Oracle 会在第一次访问此object时试图去重新编译它,如果此时其他session已经把此object pin到library cache中,就会出现问题,特别时当有大量的活动session并且存在较复杂的dependence时.在某种情况下,重新编译object可能会花几个小时时间,从而阻塞其它试图去访问此object的进程. http://www.eygle.com/archives/2004/10/shared_pool-5.html
01-12 16:13
查看更多