ITPub博客

首页 > Linux操作系统 > Linux操作系统 > library cache pin的诊断

library cache pin的诊断

原创 Linux操作系统 作者:atlantisholic 时间:2011-04-24 17:57:54 0 删除 编辑

Library cache pins是用于管理library cache的并发访问,pin住一个对象,就会引起相应的heap加载入内存中(如果之前没有加载过的话),Pins可以在NULL、SHARE或者EXCLUSIVE模式下获得,你也可以认为Pins是一种特定形式的锁。当“library cache pin”等待出现时,说明存在其他会话以非兼容的模式持有该PIN。

以下模拟library  cache pin的产生:

create or replace procedure A
as
begin
null;
end;
/

create or replace procedure B
as
begin
A;
dbms_lock.sleep(100);
end;
/

打开两个回话,在回话1中执行过程B,在回话2中对A过程进行编译:

session1:
exec B;
session2:
alter procedure A compile;
回话2将被阻塞,查看v$session_wait即可看到library cache pin的等待,以下为诊断。

快速诊断:

1、得到library cache pin等待事件的参数p1raw的值,即PARAMETER1:

select event,p1raw from v$session_wait where event='library cache pin';

2、查询具体等待的对象:


SELECT kglnaown "Owner", kglnaobj "Object"  FROM x$kglob  WHERE kglhdadr='&P1RAW';

根据步骤1得到的p1raw值,得到具体被等待的对象。

3、根据如下SQL,可以显示在被等待对象上发生的正在持有pin或正在请求pin的会话信息:

 

SELECT s.sid,s.serial#,kglpnmod"Mode", kglpnreq "Req"  FROM x$kglpn p,v$session s
WHERE p.kglpnuse=s.saddr
AND kglpnhdl='&P1RAW';

假如结果如下:
       SID       Mode        Req


---------- ---------- ----------

       140          0          2

       144          0          3

       159          2          0

Oracle给出的判断方法为:

(mode为2的持有S模式的会话会阻塞req为3的持有X模式的会话)
(req为3的持有S模式的会话会被mode是3的持有X模式的会话阻塞,或者排队在其他X模式请求的会话后面)

那么对于上面的结果,我就可以知道,在对象上持有共享模式pin的会话159阻塞了请求X模式锁的144会话;而会话140会话会被任何持有exclusive和mode为3的会话阻塞,即140又被144阻塞。

到这里,我就可以根据相关会话目前正在执行的操作,确认后,可将其Kill,释放锁资源。

额外财富,呵呵!

Library Cache pin通常发生在编译或重新编译PL/SQL、VIEW、TYPES等objects时,编译通常都是显性的,如安装应用程序,升级,安装补丁程序等。另外,ALTER、GRANT、REVOEK等操作也会使object变得无效。

当object变得无效时,Oracle会在第一次访问此object时,视图去重新编译它,如果此时其他session已经把此object pin到library cache中了,就会出现问题,特别是当有大量的活动的session并且存在复杂的的依赖性时。在某种情况,重新编译object可能会花几个小时的时间,从而阻塞其他试图访问此object的进程。

以下列出几种可能产生library cache pin的情况机器避免方法:

1、用户权限管理
当对用户的权限进行管理,即进行grant/revoke时,可能产生library cache pin.
建议的避免方法:通过角色来对最终用户进行授权,或回收权限,而不要用显性的方式直接对最终用户授权或回收权限。

2、高峰时的object管理

在系统运行高峰时对数据库的object管理可能会产生library cache pin。
建议的避免方法:把对数据库object的管理安排到数据库负载较小的时段进行。

3、在PL/SQL包中存在大量的互跨的依赖性

建议的避免方法:尽可能按等级来排列它们的结构。

 

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

请登录后发表评论 登录
全部评论

注册时间:2010-08-30

  • 博文量
    130
  • 访问量
    629267