作者:dbtan |【转载时请以超链接形式标明文章出处作者信息】


Library Cache Pin 及 Library Cache Lock分析:

Oracle使用两种数据结构来进行Library Cache的并发访问控制:lockpin。lock可以被认为是解析锁,而pin则可以被认为是以读取或改变对象内容为目的所加的短时锁。之所以将Library Cache Object对象分开,使用多个锁定来保护,其中一个重要的目的就是为了提高并发。

lock比pin具有更高的级别。lock在对象handle上获得,在pin一个对象之前,必须首先获得该handle的锁定。handle可以理解为Library Cahce对象的Buffer Header,其中包含了库缓存对象的名称、标记、指向具体对象的内存地址指针等信息。

锁定(lock)主要有3种模式:Null、Share和Exclusive。在读取访问对象时,通常需要获取Null(空)模式以及Share(共享)模式的锁定。在修改对象时,需要获得Exclusive(排他)锁定。Library Cache Lock根本作用就是控制多个Oracle客户端对同一个Library Cache对象的并发访问,通过对Library Cache Object Handle上加锁来防止非兼容的访问。常见的使用或保护包括:

·一个客户端防止其它客户端访问同一对象;
·一个客户端可以通过锁定维持相对长时间的依赖性(例如,防止其他客户端修改对象);
·当在Library Cache中定位对象时也需要获得这个锁定。

在锁定了Library Cache对象以后,一个进程在访问之前必须pin该对象。同样pin有3种模式:Null、Share和Exclusive。只读模式时获得共享pin,修改模式获得排他pin。通常我们访问、执行过程、Package时获得的都是共享pin,如果排他pin被持有,那么数据库此时就要产生等待。

为了实现更好的性能,从Oracle 10gR2开始,Library Cache Pin已经逐渐被互斥机制(Mutex)所取代,在Oracle 11g中,这个变化就更为明显。

- The End -