Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1134183
  • 博文数量: 276
  • 博客积分: 10077
  • 博客等级: 上将
  • 技术积分: 2513
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-24 20:31
文章分类

全部博文(276)

文章存档

2020年(1)

2015年(5)

2012年(2)

2011年(6)

2010年(7)

2009年(224)

2008年(31)

我的朋友

分类: Oracle

2009-08-21 11:23:57

1)get p1raw of 'library cache pin'
SELECT sid, event, p1raw, seconds_in_wait, wait_time
  FROM v$session_wait
 WHERE event = 'library cache pin'
   AND state = 'WAITING'
 order by p1raw

2)which session hold the object
select a.sid,a.SERIAL#,a.username,a.program
from v$session a,x$kglpn b
where a.saddr=b.kglpnuse and b.kglpnhdl = 'C0000000222B8728' and b.KGLPNMOD<>0

3)what does the session do.
select username,program from v$session where sid=&SID;

select c.SQL_TEXT
from v$sqlarea c, v$session d
where c.ADDRESS= d.SQL_ADDRESS
and d.sid=&SID;

 
 
+++++++++++++++++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.KGLPNMOD<>0
  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/pin
1、所有的DDL都会对被处理的对象请求排他类型的lock和pin
2、当要对一个过程或者函数进行编译时,需要在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的进程.

阅读(943) | 评论(0) | 转发(0) |
0

上一篇:MSSQL2000恢复测试

下一篇:MSSQL2000 performance

给主人留下些什么吧!~~