模擬library cahe lock/pin等待事件以及問題定位
今天打算複習一下library cache lock/pin等待事件,於是模擬了以下的實驗。
1.在u1使用者下建立測試需要的儲存過程
create or replace procedure p
as
begin
dbms_lock.sleep(10000);
end;
/
2.在A會話中執行該儲存過程
exec p;
3.在B會話中重新編譯儲存過程
alter procedure p;
4.查詢library cache pin等待事件的相關會話
select saddr,sid,username,event,p1raw from v$session where event='library cache pin';
SADDR SID USERNAME EVENT P1RAW
-------- ---------- ---------- ------------------------------ --------
33B35BE4 151 U1 library cache pin 2D6CF718
5.查詢持有library cache pin的會話以及pin住的物件
SELECT s.sid, kglpnmod "Mode", kglpnreq "Req",kglnaown "Owner",kglnaobj "Object"
FROM x$kglpn p, v$session s,x$kglob o
WHERE p.kglpnuse=s.saddr
AND p.kglpnhdl=o.kglhdadr and p.kglpnhdl='2D6CF718';
SID Mode Req Owner Object
---------- ---------- ---------- ---------- ----------
151 0 3 U1 P1
143 2 0 U1 P1
從輸出結果可以看到會話151被回話143阻塞,143會話以模式2 pin住物件p1。
6.在C會話中drop儲存過程
drop procedure p;
7.查詢檢視library cache lock等待事件的相關會話
select saddr,sid,username,event,p1raw from v$session where event='library cache lock';
SADDR SID USERNAME EVENT P1RAW
-------- ---------- ---------- ------------------------------ --------
33B2422C 136 U1 library cache lock 2D6CF718
8.查詢持有library cache lock的會話以及lock住的物件
select user_name,kglnaobj "Owner",kgllkses saddr,kgllkreq req,kgllkmod mod,kglnaobj object
from x$kgllk lock_a
where kgllkmod > 0
and exists (select lock_b.kgllkhdl from x$kgllk lock_b
where kgllkses = '33B2422C' /* blocked session */
and lock_a.kgllkhdl = lock_b.kgllkhdl
and kgllkreq > 0);
USER_NAME Owner SADDR REQ MOD OBJECT
---------- ---------- -------- ---------- ---------- ----------
U1 P1 33B35BE4 0 3 P1
U1 P1 33B2C5A4 0 1 P1
這裡出現了兩行結果,不過從mod列可以判斷33B2C5A4這個會話持有的lock模式為1(如果沒記錯的話數字1表示null),所以正在阻塞136會話的是會話地址為33B35BE4的會話。
你也可以透過以下sql做進一步驗證
select sid,saddr,event,q.sql_text from v$session s,v$sql q
where saddr in ('33B35BE4','33B2C5A4') and s.sql_id=q.sql_id;
SID SADDR EVENT SQL_TEXT
---------- -------- ------------------------------ ----------------------------------------
143 33B2C5A4 PL/SQL lock timer BEGIN p1; END;
151 33B35BE4 library cache pin alter procedure p1 compile
從輸出結果發現會話地址為33B35BE4的會話正在編譯p1,所以該會話持有的lock模式肯定會x,而會話136正是被它所阻塞。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-719143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【等待事件】library cache pin事件
- latch:library cache lock等待事件事件
- Library Cache 診斷:Lock, Pin 以及 Load Lock (文件 ID 1548524.1)
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)
- library cache pin和library cache lock(二)
- [20240920]跟蹤library cache lock library cache pin使用gdb.txt
- [20240824]跟蹤library cache lock library cache pin使用gdb.txt
- [20240827]分析為什麼出現library cache lock等待事件2.txt事件
- [20240828]分析為什麼出現library cache lock等待事件5.txt事件
- Library Cache最佳化篇(一)降低library cache lock和library cache pin的方法
- LightDB/PostgreSQL等待事件 Lock transactionidSQL事件
- [20220531]模擬inactive session等待事件.txtSession事件
- [20201117]解析cursor pin S等待事件.txt事件
- 一次library cache lock 問題分析
- 【ASK_ORACLE】Library cache pin 與 library load lock的關係和區別Oracle
- 等待事件enq: TX - row lock contention事件ENQ
- [20241105]跟蹤library cache lock library cache pin使用gdb(11g)2.txt
- [20241108]跟蹤library cache lock library cache pin使用gdb(11g)4.txt
- [20241108]跟蹤library cache lock library cache pin使用gdb(11g)3.txt
- oracle等待事件之cursor:pin S wait on XOracle事件AI
- 【TUNE_ORACLE】等待事件之“library cache pins”Oracle事件
- library cache pin(轉)
- ORACLE LOCK,LATCH,PINOracle
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- 重啟大法失效?詳述Oracle11g因JDBC bug引發異常Library Cache Lock等待處理事件OracleJDBC事件
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- library cache lock和library cache bin實驗_2.0
- DBA手記(學習)-library cache pin
- Solidity事件,等待事件Solid事件
- 問題定位 | XtraBackup 8.0 資料重建避坑事件始末事件
- 【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定義Oracle
- [20181031]模擬網路問題.txt
- 當刪除oracle資料庫user時發生row cache lock 等待事件Oracle資料庫事件
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- 藍橋杯模擬題——長草問題
- Android studio虛擬模擬器安裝問題Android
- 關於Android studio中遇到Library has broken以及mac遇到clean消失問題AndroidMac