Library Cache Lock/Pin研究

Oracle使用lock和pin来进行shared pool的并发访问。Lock比pin具有更高的级别。
Lock在handle上获得,在pin一个对象之前,必须首先获得该handle的锁定。
Lock有三种模式:Null、Share、Exclusive。
在读取对象时,通常需要获取Null以及Share模式的锁定。在修改对象时需要获取Exclusive锁定。
一个进程在访问之前必须pin住对象,pin之前必须先获取到Library Lach Lock。同样pin有三种模式:Null、Share、Exclusive。只读模式时获取share pin,修改模式时获取exclusive pin。
访问、执行过程和package时,获取的都是share lock和share pin。修改、编译时需要获取Excusive lock 和 Exclusive pin。
固定表x$kglob (Kernle Generic Library Cache Manager Object)
       X$kglpn(Kernle Generic Library Cache Manager Object Pin)
       X$KGLLK(Kernle Generic Library Cache Manager Object Lock)(该视图数据更清楚,能够同时看到lock和pin的信息)

x$kglob.kglhdpar = x$kglpn.kglpnhdl
X$KGLLK.kglhdpar = x$kglob.kglhdpar
X$KGLLK .Kgllkpnc = x$kglpn.kglpnadr
X$KGLLK.kgllkuse、X$KGLLK.kgllkses、X$KGLPN.kglpnuse、X$KGLPN.kglpnuse都为session.saddr

 

SQL> col SID format a3
SQL> col event format a20
SQL> col P1TEXT format a10
SQL> col P2TEXT format a10
SQL> col P3TEXT format a10
SQL> select sid,
  2         seq#,
  3         event,
  4         p1text,
  5         p1,
  6         p1raw,
  7         p2text,
  8         p2,
  9         p2raw
 10    from v$session_wait
 11   where event = 'library cache pin';
 
SID       SEQ# EVENT                P1TEXT             P1 P1RAW    P2TEXT             P2 P2RAW
--- ---------- -------------------- ---------- ---------- -------- ---------- ---------- --------
 32        870 library cache pin    handle add  622063236 2513EE84 pin addres  700781064 29C51208
                                    ress                           s
                                   
SQL> col sid format a3
SQL> col INST_ID format 8
SQL> col KGLNAOWN format a6
SQL> col KGLNAOBJ format a10
SQL> select inst_id, kglhdadr, kglhdpar, kglnaown, kglnaobj, kglnahsh, kglhdobj
  2    from x$kglob
  3   where kglhdadr = '2513EE84';
 
   INST_ID KGLHDADR KGLHDPAR KGLNAO KGLNAOBJ     KGLNAHSH KGLHDOBJ
---------- -------- -------- ------ ---------- ---------- --------
         1 2513EE84 2513EE84 RMGZ   PINING     2175063080 2513EC6C
        
        
SQL> select inst_id, kglpnadr, kglpnuse, kglpnuse, kglpnhdl, kglpnlck, kglpnmod, kglpnreq
  2    from x$kglpn
  3   where kglpnhdl = '2513EE84'
  4  ;
 
   INST_ID KGLPNADR KGLPNUSE KGLPNUSE KGLPNHDL KGLPNLCK   KGLPNMOD   KGLPNREQ
---------- -------- -------- -------- -------- -------- ---------- ----------
         1 29C51208 2B664C5C 2B664C5C 2513EE84 00                0          3
         1 29C50BD8 2B660A4C 2B660A4C 2513EE84 29C4FEA0          2          0
         1 29C50A70 2B65A27C 2B65A27C 2513EE84 29C4FA20          2          0
        
Kglpnlck<>’00’获取到Library Latch Lock的纪录
KGLPNMOD为pin的锁定模式
Kglpnreq为等待3模式的锁定(3为 Exclusive Pin)

SQL> select kgllkadr,
  2         kgllkuse,
  3         kgllkses,
  4         kgllkhdl,
  5         kgllkmod,
  6         kgllkreq,
  7         kgllkpnc,
  8         kgllkhdl,
  9         kglhdpar,
 10         user_name,
 11         kglnaobj
 12    from X$KGLLK
 13   where kglhdpar = '2513EE84'
 14  ;
 
KGLLKADR KGLLKUSE KGLLKSES KGLLKHDL   KGLLKMOD   KGLLKREQ KGLLKPNC KGLLKHDL KGLHDPAR USER_NAME KGLNAOBJ
-------- -------- -------- -------- ---------- ---------- -------- -------- -------- --------- ----------
29C4FA20 2B65A27C 2B65A27C 2513EE84          1          0 29C50A70 2513EE84 2513EE84 SYS       PINING
29C4FEA0 2B660A4C 2B660A4C 2513EE84          1          0 29C50BD8 2513EE84 2513EE84 SYS       PINING
29C500E0 2B664C5C 2B664C5C 2513EE84          3          0 00       2513EE84 2513EE84 SYS       PINING 

从数据可知:kgllkpnc=’00’说明没有取得pin上的锁定,正在等待            
Kgllkpnc = x$kglpn.kglpnadr查询在pin上的锁定信息。                      
Kgllkmod代表library latch lock上的锁定模式:1:null,2:share,3:Exclusive                

在上面的基础上再增加一个library latch lock 的等待                                    

SQL> select sid,seq#,event,p1text,p1,p1raw,p2text,p2,p2raw,p3text,p3,p3raw from v$session_wait where event like'library cache %';
                                                                                                                                
SID       SEQ# EVENT                P1TEXT             P1 P1RAW    P2TEXT             P2 P2RAW    P3TEXT             P3 P3RAW   
--- ---------- -------------------- ---------- ---------- -------- ---------- ---------- -------- ---------- ---------- --------
 32        961 library cache pin    handle add  622063236 2513EE84 pin addres  700781064 29C51208 100*mode+n        301 0000012D
                                    ress                           s                              amespace                      
                                                                                                                                
 23        249 library cache lock   handle add  622063236 2513EE84 lock addre  700776960 29C50200 100*mode+n        301 0000012D
                                    ress                           ss                             amespace                      
                                                                                                                                
SQL>                                                                                                                            
SQL> select kgllkadr,                                                                                                           
  2         kgllkuse,                                                                                                           
  3         kgllkses,                                                                                                           
  4         kgllkhdl,                                                                                                           
  5         kgllkmod,                                                                                                           
  6         kgllkreq,                                                                                                           
  7         kgllkpnc,                                                                                                           
  8         kgllkhdl,                                                                                                           
  9         kglhdpar,                                                                                                           
 10         user_name,                                                                                                          
 11         kglnaobj                                                                                                            
 12    from X$KGLLK                                                                                                             
 13   where kglhdpar = '2513EE84'                                                                                               
 14  ;                                                                                                                          
                                                                                                                                
KGLLKADR KGLLKUSE KGLLKSES KGLLKHDL   KGLLKMOD   KGLLKREQ KGLLKPNC KGLLKHDL KGLHDPAR USER_NAME                      KGLNAOBJ    
-------- -------- -------- -------- ---------- ---------- -------- -------- -------- ------------------------------ ----------  
29C50200 2B65F76C 2B65F76C 2513EE84          0          3 00       2513EE84 2513EE84 SYS                            PINING      
29C4FA20 2B65A27C 2B65A27C 2513EE84          1          0 29C50A70 2513EE84 2513EE84 SYS                            PINING      
29C4FEA0 2B660A4C 2B660A4C 2513EE84          1          0 29C50BD8 2513EE84 2513EE84 SYS                            PINING      
29C500E0 2B664C5C 2B664C5C 2513EE84          3          0 00       2513EE84 2513EE84 SYS                            PINING    

可以看到:Kgllkmod=0  and kgllkreq=3 为等待library latch lock(Exclusive),同时kgllpnc==’00’说明没有pin上的锁定(前面说过了必须先获取latch lock后,才能获取到pin) 
                                                                                                                                

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/195110/viewspace-684312/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/195110/viewspace-684312/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值