资源描述:
《library cache pin或lock的简单解决办法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、librarycachepin/lock的简单解决办法近日数据库出现librarycachepin的问题,网上转过来一个简单的查询办法,以备日后使用。 Oracle使用两种数据结构来进行sharedpool的并发控制:lock和pin.Lock比pin具有更高的级别.Lock在handle上获得,在pin一个对象之前,必须首先获得该handle的锁定.锁定主要有三种模式:Null,share,Exclusive.在读取访问对象时,通常需要获取Null(空)模式以及share(共享)模式的锁定.在修改对象时,需要获得Exclusive(排他)锁定.在
2、锁定了LibraryCache对象以后,一个进程在访问之前必须pin该对象.同样pin有三种模式,Null,shared和exclusive.只读模式时获得共享pin,修改模式获得排他pin.通常我们访问、执行过程、Package时获得的都是共享pin,如果排他pin被持有,那么数据库此时就要产生等待.在很多statspack的report中,我们可能看到以下等待事件: Top5WaitEvents~~~~~~~~~~~~~~~~~ Wait %TotalE
3、vent Waits Time(cs) WtTime---------------------------------------------------------------------------librarycachelock 75,884 1,409,500 48.44latchfree 34,297,906
4、 1,205,636 41.43librarycachepin 563 142,491 4.90dbfilescatteredread 146,283 75,871 2.61enqueue 2,211 13,003 .45 -------------------------------
5、------------------------------ 这里的librarycachelock和librarycachepin都是我们关心的.接下来我们就研究一下这几个等待事件.(一).LIBRARYCACHEPIN等待事件Oracle文档上这样介绍这个等待事件:"librarycachepin"是用来管理librarycache的并发访问的,pin一个object会引起相应的heap被载入内存中(如果此前没有被加载),Pins可以在三个模式下获得:NULL,SHARE,EXCLUSIV
6、E,可以认为pin是一种特定形式的锁.当LibraryCachePin等待事件出现时,通常说明该Pin被其他用户已非兼容模式持有."librarycachepin"的等待时间为3秒钟,其中有1秒钟用于PMON后台进程,即在取得pin之前最多等待3秒钟,否则就超时."librarycachepin"的参数如下,有用的主要是P1和P2: P1-KGLHandleaddress. P2-Pinaddress P3-EncodedMode&Namespace"LIBRARY
7、CACHEPIN"通常是发生在编译或重新编译PL/SQL,VIEW,TYPES等object时.编译通常都是显性的,如安装应用程序,升级,安装补丁程序等,另外,"ALTER","GRANT","REVOKE"等操作也会使object变得无效, 可以通过object的"LAST_DDL"观察这些变化.当object变得无效时,Oracle会在第一次访问此object时试图去重新编译它,如果此时其他session已经把此objectpin到librarycache中,就会出现问题,特别时当有大量的活动session并且存在较复杂的dependence时
8、.在某种情况下,重新编译object可能会花几个小时时间,从而阻塞其它试图去访问此object的进程.下面让我们通过一个例