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