Library Cache Pin 及 Library Cache Lock分析

edwardking888發表於2010-04-13

Oracle使用兩種資料結構來進行Library Cache的併發訪問控制:lockpin。lock可以被認為是解析鎖,而pin則可以被認為是以讀取或改變物件內容為目的所加的短時鎖。之所以將Library Cache Object物件分開,使用多個鎖定來保護,其中一個重要的目的就是為了提高併發。

lock比pin具有更高的級別。lock在物件handle上獲得,在pin一個物件之前,必須首先獲得該handle的鎖定。handle可以理解為Library Cahce物件的Buffer Header,其中包含了庫快取物件的名稱、標記、指向具體物件的記憶體地址指標等資訊。

鎖定(lock)主要有3種模式:Null、Share和Exclusive。在讀取訪問物件時,通常需要獲取Null(空)模式以及Share(共享)模式的鎖定。在修改物件時,需要獲得Exclusive(排他)鎖定。Library Cache Lock根本作用就是控制多個Oracle客戶端對同一個Library Cache物件的併發訪問,通過對Library Cache Object Handle上加鎖來防止非相容的訪問。常見的使用或保護包括:

·一個客戶端防止其它客戶端訪問同一物件;
·一個客戶端可以通過鎖定維持相對長時間的依賴性(例如,防止其他客戶端修改物件);
·當在Library Cache中定位物件時也需要獲得這個鎖定。

在鎖定了Library Cache物件以後,一個程式在訪問之前必須pin該物件。同樣pin有3種模式:Null、Share和Exclusive。只讀模式時獲得共享pin,修改模式獲得排他pin。通常我們訪問、執行過程、Package時獲得的都是共享pin,如果排他pin被持有,那麼資料庫此時就要產生等待。

為了實現更好的效能,從Oracle 10gR2開始,Library Cache Pin已經逐漸被互斥機制(Mutex)所取代,在Oracle 11g中,這個變化就更為明顯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659594/,如需轉載,請註明出處,否則將追究法律責任。

相關文章