oracle怎样快速定位资源持有者

从本质上来讲,Oracle所有资源都是串行化操作的,即Oracle不允许多个进程同时对同一对象进行修改。为了在串行化上实现并行化,Oracle推出了LOCK、LATCH、MUTEX三种不同的机制来保护不同的对象,所以快速定位资源持有者是DBA处理性能问题时的一个必备技能。

下面是获取LOCK相关的资源持有者信息的SQL:

select * from gv$lock where block=1;  
select * from dba_waiters; 

下面是获取LATCH相关的持有者信息的SQL:

select * from v$latchholder; 

在获取MUTEX相关的持有者信息时,假如当前系统正在发生cursor: pin S wait on X争用,可以用以下SQL查出MUTEX的持有者信息:

select to_number(substr(to_char(rawtohex(p2raw)),1,8),'XXXXXXXX') sid  
from v$session  
where event = 'cursor: pin S wait on X'; 

在高并发的环境中,争用往往发生在Library Cache Handle(以下简称Handle)和Library Cache Object(以下简称LCO)中。Handle上的LATCH争用主要表现为Library Cache Lock等待事件,可以用以下SQL查出Handle上的持有者信息:

select b.sid,a.user_name,a.kglnaobj  
from x$kgllk a , v$session b  
where a.kgllkhdl in  
(select p1raw from v$session_wait  
where wait_time=0 and event = 'library cache lock')  
and a.kgllkmod <> 0  
and b.saddr=a.kgllkuse; 

LCO上的争用主要表现为Library Cache Pin等待事件,可以用以下SQL查出Handle上的持有者信息:

select sid from x$kglpn , v$session  
where KGLPNHDL in  
(select p1raw from v$session_wait  
where wait_time=0 and event like 'library cache pin%')  
and KGLPNMOD <> 0  
and v$session.saddr=x$kglpn.kglpnuse; 

下面是用于获取 Row Cache相关的持有者信息的SQL:

select * from  v$rowcache_parent where lock_mode<>0; 

提示 从Oracle 10g开始,V$SESSION视图增加了BLOCKING_SESSION字段,很多资源阻塞者会话都可以通过该字段查到。

内容转自http://book.51cto.com/art/201312/421419.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值