分享

谈谈LIBRARY?CACHE?LOCK,?PIN?和?LOAD?LOCK

 xfxyxh 2010-10-22
谈谈LIBRARY CACHE LOCK, PIN 和 LOAD LOCK

Library cache lock:

  这个锁的作用是控制多个Oracle客户端对同一个LIBRARY CACHE对象的并发访问。通过对LIBRARY CACHE OBJECT HANDLE上加锁来防止非兼容的访问。包括:

  • 一个客户端可以通过这个锁来防止其他客户端访问这个对象
  • 一个客户端可以在一个相对长的时间内防止某个对象被修改(比如为了分析某个SQL的过程中防止某个存储过程被修改)
  • 一个客户端在共享池中查找某个对象也可以使用这个锁

当SQL和PL/SQL分析的时候,able, view, procedure, function, package, package body, trigger, index, cluster, synonym这些对象使用这个锁来保护。而CURSOR,PL/SQL片段以及一些瞬时对象不使用该锁。

Library cache pin:

    当一个对象要被装载到内存中的时候,需要使用Library cache pin,如果一个客户端要修改或者查看某个对象的时候,在library cache lock后,需要加library cache pin。

    如我们以前讨论过的,一个对象在共享池中包括HANDLE(KGLHD)以及kglob,kglna,只有当这3个部分都在内存中,才能够持有library cache pin。

 

library cache lock和Library cache pin都是为了并发访问共享池对象的。lock是为了在客户端中进行同步,而pin是为了保护共享内存的访问。LOCK可能会产生死锁,而且死锁对于访问性能影响较大。而PIN对于死锁不敏感。

 

参考资料METALINK NOTE:444561.1

可以通过 X$KGLLK 和 X$KGLPN来查看LOCK 和PIN

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多