当前位置: DBARoad > 故障案例 > 文章正文

RAC环境下library cache pin/lock的处理

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接:http://www.dbaroad.me/archives/2010/05/rac_pin_lock.html

这个案例放着很久了,最近又有遇到,小结了一下。
RAC环境下,主要是不同实例上handle地址(kglpnhdl or kgllkhdl)不同,所以如果pin/lock被不同的节点持有时,处理起来就略有不同,看下面这个例子:

实例1上进行授权操作,发现会话挂起,等待事件为:library cache pin:

SQL> select inst_id, sid, event, p1raw
  2    from gv$session_wait
  3   where event = 'library cache pin';
 
   INST_ID        SID EVENT                P1RAW
---------- ---------- -------------------- ----------------
         1       2325 library cache pin    C00000087F12E1F8

实例1上,只有一个请求pin的会话,也就是当前在做授权的会话:

SQL> select inst_id, KGLPNUSE, KGLPNHDL, KGLPNMOD, KGLPNREQ
  2    from x$kglpn
  3   where kglpnhdl = 'C00000087F12E1F8'
  4   order by KGLPNREQ;
 
INST_ID KGLPNUSE         KGLPNHDL           KGLPNMOD   KGLPNREQ
------- ---------------- ---------------- ---------- ----------
      1 C0000007C97625C0 C00000087F12E1F8          0          3
 
SQL> select sid,serial#,sql_hash_value,username,machine from v$session
  2  where saddr='C0000007C97625C0';
 
   SID    SERIAL# SQL_HASH_VALUE USERNAME  MACHINE
------ ---------- -------------- --------- -------
  2325       5103     3038871805 SYS       host1
 
SQL> select kglnaown, kglnaobj
  2    from X$KGLOB
  3   where KGLHDADR = 'C00000087F12E1F8';
 
KGLNAOWN   KGLNAOBJ
---------- ---------------
U_NAME     OBJ2CHANNEL

那么这个对象很有可能在实例2上被pin住了。
每个实例都有自己的shared pool,handle地址不同也比较好理解,所以不能用handle地址去查找了。
但有一点是不会变的,那就是x$kglob中显示的被pin住的对象,因此,这个handle地址就可以从x$kglob中获取了。
几个视图关联下,就可以通过以下这个语句在另一个节点上来查找持有pin的会话:

SQL> select p.inst_id,
  2         s.sid,
  3         s.sql_hash_value,
  4         s.username,
  5         s.osuser,
  6         s.machine,
  7         p.KGLPNUSE,
  8         p.KGLPNHDL,
  9         p.KGLPNMOD,
 10         p.KGLPNREQ,
 11         o.kglnaobj
 12    from v$session s, x$kglpn p, x$kglob o
 13   where o.kglnaobj = 'OBJ2CHANNEL'
 14     and p.kglpnhdl = o.kglhdadr
 15     and s.SADDR = p.kglpnuse
 16     and p.KGLPNMOD <> 0;
 
INST_ID SID SQL_HASH_VALUE USERNAME OSUSER MACHINE KGLPNUSE         KGLPNHDL         KGLPNMOD KGLPNREQ KGLNAOBJ
------- --- -------------- -------- ------ ------- ---------------- ---------------- -------- -------- ---------
      2 197     4062951240 U_NAME   u_name host2   C00000081E3E5C60 C000000888817D68        2        0 OBJ2CHANN
      2 197     4062951240 U_NAME   u_name host2   C00000081E3E5C60 C00000088ED88980        2        0 OBJ2CHANN

library cache lock处理类同,只是视图换一下(x$kgllk)。
— The End —

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |