共享池之六:shared pool latch/ library cache latch /lock pin 簡介
latch:library cache --desc v$librarycache;
latch:library cache用於保護hash bucket.
library cache lock保護HANDLE。
library cache pin保護library cache object--LCO.
從10G開始,library cache lock和library cache pin被MUTEX部分取代。暫時不討論MUTEX。
latch:library cache的數量:
SYS@ bys3>select name from v$latch_children where name like '%librarycache%';
隱含引數:_kgl_bucket_count,預設值大於等於系統中CPU個數的最小素數-不超過67。查詢時會顯示為0--BUG。
一個latch:library cache管理著多個librarycache buckets.
latch:library cache多是因為區域性latch:library cache訪問比較頻繁,增大其數量並不能解決。
如果shared pool過小,也會引發librarycache latch競爭,進而引起shared pool latch競爭---參考AWR--Shared Pool Advisory
具有高version_count的SQL也容易導致latch:library cache,因為在搜尋到子LCO前會一直持有latch:library cache。
#########
library cache lock保護HANDLE--父遊標和子游標的handle
在硬解析時,需要以獨佔模式(EXCLUSIVE)持有librarycache lock和library cache pin。
程式訪問LCO,首先需要在latch:librarycache的保護下獲得library cache lock,才能訪問和修改HANDLE;然後獲取library cache pin,才能訪問和LCO。
子游標的HANDLE和LCO的訪問和上面一樣。
MODE有三類: null 1;shared 2;exclusive 3;
null 1;空鎖:空鎖和獨佔鎖互相不阻塞,主要起“標記”目的。標記物件正在使用中,或者標記物件以後還會用。保證物件記憶體不會被覆蓋或釋放。--可以執行三次,檢視
select kglhdadr,kglhdpar,kglhdlmd,kglobhs0,kglobhd0,kglobhd6 from x$kglob wherekglnaobj like 'select * from aaa';
檢視遊標是否關閉。執行不大於3次,不會快取,如有其它語句,則將未快取的清空。
select * from bys.dept 執行三次,
SYS@ bys3>select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhd0,kglobhd6from x$kglob where kglnaobj like 'select * from bys.dept';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHD0 KGLOBHD6
-------- -------- ---------- ---------- ---------- -------- --------
2499B1C0 24965DB4 1 0 4372 246C5CE0 252F0DD0
----被快取的子游標,
24965DB4 24965DB4 1 0 4500 23CC848C 00
被快取的遊標:當記憶體不足時,子游標堆6可以被覆蓋,其它HADNLE等不可被覆蓋。--原因是:重建執行計劃的資訊--父堆0,子堆0等都有可以快速重建執行計劃-也算硬解析,但是消耗資源比正常硬解析少。
等待事件的P1 P2 P3分別是:
P1=HANDLE ADDRESS
P2=LOCK/PIN ADDRESS
PS=MODE*100+NAMESPACE
NAMESPACE分以下型別:
1.SQL AREA
2.TABLE/PROCEDURE/FUNCTION/PACKAGE HEADER
3.PACKAGE BADY
4.TRIGGER
5.INDEX
6.CLUSETER
7.PIPE
13.JAVA SOURCE
14.JAVE RESOURCE
32.JAVA DATA
常見的library cache lock持有模式的情況:
以獨佔持有的語句是:
ALTER TABLE……,
CREATE OR REPLACE PROCEDURE;
共享模式持有:SQL解析階段
在SQL執行階段,由共享模式轉換為NULL。
定位引起library cache lock等待事件的語句:
select b.sid from x$kgllk a,v$session b where a.kgllkhdl in (select p1raw fromv$session_wait where wait_time=0 and event='library cache lock') and a.kgllkmod<>0and b.saddr=a.kgllkuse;
常見的library cache pin持有模式的情況:
以獨佔模式持有的是:
ALTER PROCEDURE ..COMPLE;
硬解析產生執行計劃過程中需要
以共享模式持有的是:SQL執行階段、PROCEDURE執行階段。
定位引起library cache pin等待事件的會話:
select a.sid from x$kglpn b,v$session a where b.kglpnhdl in (select c.p1rawfrom v$session_wait c where c.wait_time=0 and c.event like 'library cachepin%') and b.kglpnmod<>0 and a.saddr=b.kglpnuse;
相關文章
- [20190319]shared pool latch與library cache latch的簡單探究.txt
- [20210512]shared pool latch與library cache latch的簡單探究.txt
- latch:library cache lock等待事件事件
- [20210520]11g shared pool latch與library cache mutex的簡單探究.txtMutex
- ORACLE LOCK,LATCH,PINOracle
- [20210521]11g shared pool latch與library cache mutex的簡單探究4.txtMutex
- [20210520]11g shared pool latch與library cache mutex的簡單探究3.txtMutex
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)
- library cache pin和library cache lock(二)
- [20210708]使用那個shared pool latch.txt
- 共享池 shared pool
- [20210803]使用那個shared pool latch(補充).txt
- [20240920]跟蹤library cache lock library cache pin使用gdb.txt
- [20240824]跟蹤library cache lock library cache pin使用gdb.txt
- Library Cache最佳化篇(一)降低library cache lock和library cache pin的方法
- [20190415]關於shared latch(共享栓鎖).txt
- 透過案例學調優之--和 SHARED POOL 相關的主要 Latch
- Library Cache 診斷:Lock, Pin 以及 Load Lock (文件 ID 1548524.1)
- [20220406]使用那個shared pool latch的疑問1.txt
- mutex,latch,lock,enqueue hash chains latch基礎概念MutexENQAI
- [20220412]shared pool latch與使用sga heap的疑問2.txt
- [20220413]shared pool latch與使用sga heap的疑問3.txt
- [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
- library cache pin(轉)
- [20190419]shared latch spin count.txt
- 【ASK_ORACLE】Library cache pin 與 library load lock的關係和區別Oracle
- 【等待事件】library cache pin事件
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- 【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定義Oracle
- [20190419]shared latch spin count 2.txt
- [20210218]shared latch spin count 6.txt
- [20210218]shared latch spin count 5.txt
- library cache lock和library cache bin實驗_2.0
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- 使用DBMS_SHARED_POOL包將物件固定到共享池物件
- [20190416]檢視shared latch gets的變化.txt