Oracle使用两种数据结构来进行Library Cache的并发访问控制:lock和pin。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中,这个变化就更为明显。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8183550/viewspace-659594/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8183550/viewspace-659594/