天天看點

oracle 檢視鎖等待時間,Oracle阻塞(鎖等待)查詢

Oracle阻塞(鎖等待)查詢

主要查詢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:

* from t where a=1;

A NAME       ADDRESS

---------- ---------- --------------------

1 chennan

已選擇 1 行。

t set address='my address' where a=1;

已更新 1 行。

* from t where a=1;

A NAME       ADDRESS

---------- ---------- --------------------

1 chennan    my address

已選擇 1 行。

>

session2:

* from t where a=1;

A NAME       ADDRESS

---------- ---------- --------------------

1 chennan

已選擇 1 行。

t set address='test' where a=1;

[  一直阻塞 ...]

session3:

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行。

BLOCK_MSG

-----------------------------------------------------------

CHENNAN ('11,1480') is blocking 10

已選擇 1 行。