enq:Library cache lock/pin等待事件
前言:ORACLE資料庫記憶體兩個很重要的部分:Buffer cache和Library cache,早期已經有整理過一篇關於Buffer cache的管理和關於Buffer cache的等待事件(cache buffers chains),一直想整理一篇關於Library cache的文章,剛好在oracle的官網上看到了相應的文件,順手記錄下來,供大家參考。
(library cache的文件http://www.hellodb.net/2010/07/oracle-library-cache.html)
1、什麼是Library cache lock
這個事件控制對 library cache 的併發使用。 它獲取一個物件控制程式碼(object handle)上的鎖,從而:
定位 library cache 中的一個物件同樣也需要這個鎖。 cursor(SQL 與 PL/SQL 區),管道(pipes)和其它的瞬時(transient)物件不使用這個鎖。 Library cache lock 上的死鎖不會被自動檢測到,對其的操作是同步進行的。 引數:
|
2、什麼是"Library cache pin"
這個事件管理 library cache 併發。Pin 住一個物件會使它使用的 heap 被載入到記憶體中。如果一個使用者想要修改或檢查這個物件,它必須在獲得 lock 之後再取得一個 pin。Pin 可以用 NULL, SHARE, EXCLUSIVE 模式獲得,並且可以看做是一種特殊的 lock。等待"library cache pin"意味著這個 PIN 正被某個其它 session 以不相容的模式持有。 |
3、為什麼需要這兩種不同型別的鎖
Lock 與 pin 都用於訪問在 library cache 中的物件。Lock 管理不同程式間的併發,pin 則管理緩衝區的一致性。為了訪問一個物件,程式必須首先鎖定(lock)這個物件的控制程式碼(handle),然後它自己 pin 住物件的記憶體堆。Lock 與 pin 請求會一直等待直到獲得為止,這是一個引起爭用的可能的原因,因為它沒有 NOWAIT 請求模式。通過獲得一個在物件控制程式碼上的鎖,一個程式能防止其它程式訪問這個物件,甚至不可以檢視它的型別。它還能在維護物件依賴關係的同時不阻止其它程式訪問這個物件。獲取一個 lock 同樣也是在快取中查詢物件的唯一途徑。查詢並鎖住物件是在一個操作中完成的。如果一個程式想檢查或修改一個物件,那麼它必須獲得一個在這個物件上的 pin (獲得了在控制程式碼上的鎖之後)。Pin這個動作會將相應物件的資訊載入到記憶體,如果之前沒有的話,同時還能確保這些資訊保留在記憶體直到 pin 被釋放。 Oracle 在分析/編譯 Package/Procedure/Function/View 時需要 Library Cache Lock 和 Library CachePin。這是為了確保在分析/編譯期間, 沒有其它人可以對這些物件的定義進行改變,或者刪除、重建這個物件。 當一個 SQL 語句被一個 session 硬解析時,這個 session 需要獲得一個 library cache lock 以便阻止其它 session 去訪問或修改同一個物件。如果這個事件等待很長時間。這表明可能 shared pool 過小或經常 發生物件被 flush 出去的清醒。還有,這表明資料庫物件被經常修改。除了硬解析,如果一個 session 要更改被 SQL 語句引用的物件的定義或對其做任何更改,就必須獲得一個library cache lock 和 library cache pin。需要 Pin 的原因是需要載入資料字典資訊到記憶體中來修改這個物件。 |
4、減少Library Cache 競爭的一般建議
下邊會介紹一下解決不同競爭的不同的方法。但是,很多時候這些現象都是由於 SQL 語句的版本數造成的。如果您看到了任何跟 library cache 相關的競爭,應該立刻檢查 AWR Report 確保沒有版本數很高(比如幾百)的 SQL 語句。
5、如何降低 library cache lock 等待
我們首先要確認的是 library cache 的競爭是整個系統層面的還是隻發生在某個或某些 SQL 語句上。這個"library cache lock"是被一個特定的 SQL 持有很長的時間嗎?或者總是在等待某個特定的物件?還是說這個鎖在短時間內被請求的次數很多從而造成的競爭?
如果您發現是某條或某些SQL產生的問題,那麼需要檢查為什麼它持有鎖的時間會那麼長。 |
6、如何降低 library cache pin 等待
如果"library cache pin"等待的時間很長那麼很重要的一點就是判斷是隻有一兩個 process 在等待還是有很多的 process 都在等待。
|
總結:以上都是解決問題的理論基礎,具體還得在真正的生產環境中解決了問題,才算是真正的掌握了問題,接下來希望能為大家整理一篇實戰的過程的文件。
*********************************************************************************************************
本文作者:JOHN QQ:1916066696 (請備註資料庫)
ORACLE技術部落格:
ORACLE 獵人筆記 http://blog.itpub.net/12679300/
*********************************************************************************************************
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1372956/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【等待事件】library cache pin事件
- latch:library cache lock等待事件事件
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)
- library cache pin和library cache lock(二)
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- [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的方法
- 等待事件enq: TX - row lock contention事件ENQ
- Library Cache 診斷:Lock, Pin 以及 Load Lock (文件 ID 1548524.1)
- [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
- [20240827]分析為什麼出現library cache lock等待事件2.txt事件
- [20240828]分析為什麼出現library cache lock等待事件5.txt事件
- library cache pin(轉)
- 【ASK_ORACLE】Library cache pin 與 library load lock的關係和區別Oracle
- 【TUNE_ORACLE】等待事件之“library cache pins”Oracle事件
- library cache lock和library cache bin實驗_2.0
- DBA手記(學習)-library cache pin
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- 【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定義Oracle
- Oracle等待事件之enq: TM – contentionOracle事件ENQ
- oracle等待事件之enq: CF – contentionOracle事件ENQ
- [20220518]enq FU - contention等待事件.txtENQ事件
- 故障排除 | enq:TX - index contention等待事件ENQIndex事件
- enq: TX - allocate ITL entry等待事件分析ENQ事件
- 重啟大法失效?詳述Oracle11g因JDBC bug引發異常Library Cache Lock等待處理事件OracleJDBC事件
- 一次library cache lock 問題分析
- LightDB/PostgreSQL等待事件 Lock transactionidSQL事件
- 關於enq: TX - allocate ITL entry等待事件ENQ事件
- [20201117]解析cursor pin S等待事件.txt事件
- 當刪除oracle資料庫user時發生row cache lock 等待事件Oracle資料庫事件
- oracle 11.2.0.4 rac叢集等待事件enq: TM - contentionOracle事件ENQ
- oracle等待事件之cursor:pin S wait on XOracle事件AI
- 【ASM_ORACLE】Library Cache最佳化篇(二)Library cache load lock的概念和解決辦法ASMOracle
- enq: TX - row lock contentionENQ
- ORACLE LOCK,LATCH,PINOracle