library cache pin/lock 的简单解决办法 近日数据库出现library cache pin 的问题,网上转过来一个简单的查询办法,以备日后使用。 Oracle 使用两种数据结构来进行shared pool 的并发控制:lock 和 pin. Lock 比pin 具有更高的级别. Lock 在handle 上获得,在pin 一个对象之前,必须首先获得该handle 的锁定. 锁定主要有三种模式: Null,share,Exclusive. 在读取访问对象时,通常需要获取Null(空)模式以及share(共享)模式的锁定. 在修改对象时,需要获得Exclusive(排他)锁定. 在锁定了Library Cache 对象以后,一个进程在访问之前必须pin 该对象. 同样pin 有三种模式,Null,shared 和exclusive. 只读模式时获得共享pin,修改模式获得排他pin. 通常我们访问、执行过程、Package 时获得的都是共享pin,如果排他pin 被持有,那么数据库此时就要产生等待. 在很多 statspack 的report 中,我们可能看到以下等待事件: Top 5 Wait Events ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Wait % Total Event Waits Time (cs) Wt Time -------------------------------------------- ------------ ------------ ------- library cache lock 75,884 1,409,500 48.44 latch free 34,297,906 1,205,636 41.43 library cache pin 563 142,491 4.90 db file scattered read 146,283 75,871 2.61 enqueue 2,211 13,003 .45 ------------------------------------------------------------- 这里的library cache lock 和library cache pin 都是我们关心的.接下来我们就研究一下这几个等待事件. (一).LIBRARY CACHE PIN 等待事件 Oracle 文档上这样介绍这个等待事件: "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 Mod...