现在的位置: 首页 > 综合 > 正文

Oracle阻塞(锁等待)查询

2018年01月16日 ⁄ 综合 ⁄ 共 1599字 ⁄ 字号 评论关闭
 

主要查询v$lock、v$session视图。
v$lock中的id1,id2为锁定的对象标识,block为阻塞数目。脚本show_blocker.sql相关代码如下:
col block_msg for a80

select c.terminal||' ('''||a.sid||','||c.serial#||''') is blocking '||b.sid block_msg
from v$lock a,v$lock b,v$session c
where a.id1=b.id1
  and a.id2=b.id2
  and a.block>0
  and a.sid<>b.sid
  and a.sid=c.sid
;

模拟场景:开3个session,
session1做更新,不提交。
session2做相同行的更新,将会被阻塞。
session3执行脚本观察结果。

session1:

chennan@cwgl94>select * from t where a=1;

         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan

已选择 1 行。

chennan@cwgl94>update t set address='my address' where a=1;

已更新 1 行。

chennan@cwgl94>select * from t where a=1;

         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan    my address

已选择 1 行。

chennan@cwgl94>

session2:

chennan@cwgl94>select * from t where a=1;

         A NAME       ADDRESS
---------- ---------- --------------------
         1 chennan

已选择 1 行。

chennan@cwgl94>update t set address='test' where a=1;
[  一直阻塞 ...]

session3:

chennan@cwgl94>select sid,serial#,terminal from v$session;

       SID    SERIAL# TERMINAL
---------- ---------- ----------------
         1          1 CHENNAN
         2          1 CHENNAN
         3          1 CHENNAN
         4          1 CHENNAN
         5          1 CHENNAN
         6          1 CHENNAN
         7          1 CHENNAN
         8          1 CHENNAN
         9        204 CHENNAN
        10       2590 CHENNAN
        11       1480 CHENNAN

已选择11行。

chennan@cwgl94>@show_blocker

BLOCK_MSG
-----------------------------------------------------------
CHENNAN ('11,1480') is blocking 10

已选择 1 行。

chennan@cwgl94>

-- The End --

 

 

抱歉!评论已关闭.