【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定義

Attack_on_Jager發表於2023-03-27

Library Cache Pin的定義

    這個事件是管理 library cache 併發。Pin 住一個物件會使它使用的 heap 被載入到記憶體中。如果一個使用者想要修改或檢查這個物件,它必須在獲得 lock 之後再取得一個 Pin。 Pin 可以用 NULL, SHARE, EXCLUSIVE 模式獲得並且可以看做是一種特殊的 lock。等待"library cache pin"意味著這個 PIN 正被某個其它 session 以不相容的模式持有。


    訪問當前被快取到 library cache 中的資料庫物件(表,檢視,過程,函式,包,包體,觸發器,索引,聚簇,同義詞)的時候需要獲得 library cache pin; 在 library cache 中,資料庫物件被快取成兩部分:控制程式碼(handle)和物件(object); 這個鎖(pin)只有當"object"部分被快取的時候才會被持有。

     Library cache pin 上的死鎖不會被自動檢測到,對其的操作是同步進行的!

注:

     在10g以後,"library cache pin"已經被 mutex 取代,即 “cursor: pin S wait on X”在Oracle 10.2中開始引入,這裡就簡單說明下這個等待事件,其原理大同小異。說明如下:

    一個會話等待“cursor: pin S wait on X”,當它想在一個特定的遊標上以S(共享)模式獲得一個互斥鎖,但其他會話以X(獨佔)模式持有同一個互斥鎖時。因此當前會話必須等待X模式持有者釋放互斥量。

     在RAC中,互斥物件對於的當前例項來說是本地的,不是共享的。


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

相關文章