ITPub博客

首页 > 应用开发 > IT综合 > library cache pin(1)

library cache pin(1)

原创 IT综合 作者:jss001 时间:2009-02-19 20:38:17 0 删除 编辑
概述

造成数据库性能下降或挂起的原因很多,”library cache pin”等待是其中之一.当数据库性能严重下降或挂起时,我们通过查询v$session_wait,发现大量的”library cache pin”等待,查询的SQL语句如下:

#su - oracle

$svrmgrl

svrmgr>connect internal

svrmgr>select sid,event,p1,p2,p3 from v$session_wait where wait_time=0;

SID EVENT P1 P2 P3

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

9 library cache pin 15417016 10090832 20

154 library cache pin 15417016 11224168 20

341 library cache pin 15417016 11449936 20

349 library cache pin 15417016 16489792 20

390 library cache pin 15417016 11992536 20

160 library cache pin 15417016 6166600 20

20 library cache pin 15417016 10868760 20

因此,我们断定数据库性能下降或挂起是由”library cache pin”引起的. 这种情况通常发生在大量使用数据库存储PL/SQL块的并发应用程序中,而在测试环境中则很难再现.

LIBRARY CACHE PIN等待事件

那么什么是”library cache pin”等待呢? “library cache pin” 事件是用来管理library cache的并发访问的, pin一个object会引起相应的heap被载入内存中,如果客户端需要修改或检测这个object它就必须在锁住后取得一个pin.

”library cache pin”的等待时间为3秒钟,其中有1秒钟用于PMON后台进程,即在取得pin之前最多等待3秒钟,否则就超时.

“library cache pin”的参数如下,有用的主要是P1和P2:

P1 - KGL Handle address.

P2 - Pin address

P3 - 10*Mode + Namespace

其中,P1,P2可与x$kglpn和x$kglob表相关.x$kglpn和x$kglob是ORACLE数据库的内部数据字典..

等待一个pin意味着另有一个阻塞者(blocker),它处于更高级别或不兼容状态,我

通过以下matrix来判断是否兼容,”X”表示不兼容:

Blocker

Waiter

KGLM0 KGLMN KGLMS KGLMX

KGLM0 - X X X

KGLMN - - X X

KGLMS - - - X

KGLMX - ? X X

其中: KGLM0,KGLMN,KGLMS和KGLMX是X$KGLPN和X$KGLOB中的KGLHDLMD字段的几种状态.

KGLM0 0 no lock/pin held

KGLMN 1 null mode

KGLMS 2 share mode

KGLMX 3 exclusive mode

常见的原因及解决方法

“LIBRARY CACHE PIN”通常是发生在编译或重新编译PL/SQL,VIEW,TYPES等object时.编译通常都是显性的,如安装应用程序,升级,安装补丁程序等,但object的重新编译也可能发生在object变得无效时.

我们在处理因”LIBRARY CACHE PIN”引起的性能变慢或挂起时,应检查object无效方面的原因.当我们对object进行维护,如”ALTER”,”GRANT”,”REVOKE”时,就会使object变得无效, 通过object的”LAST_DDL”属性可查看到这些变化.

当object变得无效时,Oracle 会在第一次访问此object时试图去重新编译它,如果此时其他session已经把此object pin到library cache中,就会出现问题,特别时当有大量的活动session并且存在较复杂的dependence时.在某种情况下,重新编译object可能会花几个小时时间,从而阻塞其它试图去访问此object的进程.这种情况我们可以通过library cache dump level 10,查找”ALTER …COMPILE” sql 语句和带有”lock=X” 或”pin=X”的object或handles得知.在某些时候,可能会报错,如”ORA-600 [17285]” “ORA-4061” “ORA-4065” “ORA-6508”等.

综上所述,我们在对PL/SQL存储过程中经常引用到的object进行修改,授权,收回授权时必须非常小心.实际上,解决这些问题大多要依靠应用程序的开发和维护,应用程序开发商应该考虑到某些方案的决策可能会给应用程序的伸缩性和性能带来负面影响.

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

1. 用户权限管理

当对用户的权限进行管理即进行”grant” “revoke”时,可能产生”library cache pin”.

建议的避免方法: 通过角色来对最终用户进行授权或收回授权,而不要用显性的方式即直接对最终用户授权或收回授权,从而避免产生”library

cache pin”

2. 高峰时的object管理

在系统运行高峰时对数据库object的管理可能产生”library cache pin”.

建议的避免方法: 把对数据库object的管理安排到负载相对较小的时侯.

3. 在PL/SQL包中存在大量的互跨的依赖性(dependency)

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

[@more@]

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

上一篇: vmstat
下一篇: library cache pin(2)
请登录后发表评论 登录
全部评论
  • 博文量
    306
  • 访问量
    871815