<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        SharedPool原理

        來源:懂視網 責編:小采 時間:2020-11-09 12:00:04
        文檔

        SharedPool原理

        SharedPool原理:Shared pool和PGA都是由一個Oracle的內存管理器來管理,我們稱之為KGH heap manager。Heap Manager不是一個進程,而是一串代碼。 由于shared pool中最重要的是library cache,所以本文主要講解Library cache的結構,library cach
        推薦度:
        導讀SharedPool原理:Shared pool和PGA都是由一個Oracle的內存管理器來管理,我們稱之為KGH heap manager。Heap Manager不是一個進程,而是一串代碼。 由于shared pool中最重要的是library cache,所以本文主要講解Library cache的結構,library cach

        Shared pool和PGA都是由一個Oracle的內存管理器來管理,我們稱之為KGH heap manager。Heap Manager不是一個進程,而是一串代碼。

        由于shared pool中最重要的是library cache,所以本文主要講解Library cache的結構,library cache latch,library cache lock,library cache pin。

        What is shared pool?

        Shared pool是SGA中的一部分,由于它是SGA的一部分,這意味著它可以被所有的進程所訪問,Shared Pool當中主要包含了2部分:library cache和

        dictionary cache 也稱為 row cache。

        Library cache包含了共享SQL區(shared SQL areas),私有SQL區(private SQLareas,如果配置了共享服務器),PL/SQL存儲過程以及包,還有一些控制信息,比如說locks以及library cache handles。

        Dictionary cache包含了表,視圖的依賴信息,比如表結構,它的用戶,Oracle在解析SQL的時候就會頻繁的訪問dictionary cache。

        How is it managed?

        Shared pool和PGA都是由一個Oracle的內存管理器來管理,我們稱之為KGH heap manager。Heap Manager不是一個進程,而是一串代碼。Heap Manager主要目的就是滿足server 進程請求memory 的時候分配內存或者釋放內存。Heap Manager在管理PGA的時候,Heap Manager需要和操作系統來打交道來分配或者回收內存。但是呢,在shared pool中,內存是預先分配的,Heap Manager管理所有的空閑內存。當某個進程需要分配shared pool的內存的時候,Heap Manager就滿足該請求,Heap Manager也和其他ORACLE模塊一起工作來回收shared pool的空閑內存。

        Library Cache Manager

        Library cache Manager 可以看做是Heap Manager的客戶端,因為library cache manager是根據Heap Manager來分配內存從而存放library cache objects。Library cache Manager控制所有的library cache object,包括package/procedure, cursor, trigger等等。

        Hash Table and Hash Bucket

        Library cache是由一個hash table組成,這個hash table又由hash bucket組成的數組構成,每個hash bucket又是由一些相互指向的library cache handle所組成,library cache object handle就指向具體的library cache object以及一些引用列表。

        Library Cache結構示意圖如下:

        Library Cache handle

        我們對Library cache中所有對象的訪問是通過利用library cache handle來實現的,也就是說我們想要訪問library cache object,我們必須先找到library cache handle。Library cache handle指向library cache object,它包含了library object的名字,命名空間,時間戳,引用列表,lock對象以及pin對象的列表信息等等。Library cache handle也被library cache用來記錄哪個用戶在這個這個handle上有lock,或者是哪個用戶正在等待獲得這個lock。那么這里我們也知道了library cache lock是發生在handle上的。

        當一個進程請求library cache object, library cache manager就會應用一個hash 算法,從而得到一個hash 值,根據相應的hash值到相應的hash bucket中去尋找。這里的hash算法原理與buffer cache中快速定位block的原理是一樣的。如果library cache object在內存中,那么這個library cache handle就會被找到。有時候,當shared pool不夠大,library cache handle會保留在內存中,然而library cache heap由于內存不足被age out,這個時候我們請求的object heap就會被重載。最壞的情況下,library cache handle在內存中沒有找到,這個時候就必須分配一個新的library cache handle,同時object heap也會被加載到內存中。

        Library Cache Object

        Library Cache Object是由一些獨立的heap所組成,,前面說了Library cache handle指向Library cache Object,其實handle是指向第一個heap,這個heap 我們就稱之為heap 0。Heap 0記錄了指向其他heap的指針信息。

        根據上面描述,Library cache中的的Library cache object結構示意圖可以用上圖來表示(本圖摘自DSI405)

        Library cache lock/pin

        Library cache lock/pin是用來控制對library cache object的并發訪問的。Lock管理并發,pin管理一致性,lock是針對于library cache handle,而pin是針對于heap。

        當我們想要訪問某個library cache object,我們首先要獲得這個指向這個object的handle的lock,獲得這個lock之后我們就需要pin住指向這個object的heap。

        當我們對包,存儲過程,函數,視圖進行編譯的時候,Oracle就會在這些對象的handle上面首先獲得一個library cache lock,然后再在這些對象的heap上獲得pin,這樣就能保證在編譯的時候其它進程不會來更改這些對象的定義,或者將對象刪除。

        當一個session對SQL語句進行硬解析的時候,這個session就必須獲得library cache lock,這樣其他session就不能夠訪問或者更改這個SQL所引用的對象。如果這個等待事件花了很長時間,通常表明共享池太小(由于共享池太小,需要搜索free的chunk,或者將某些可以被移出的object page out,這樣要花很長時間),當然了,也有可能另外的session正在對object進行修改(比如split 分區),而當前session需要引用那個table,那么這種情況下我們必須等另外的session進行完畢。

        Library Cache lock有3中模式:

        的時候獲得

        修改一個library cache object的時候獲得

        用來確保對象依賴性

        linux

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        SharedPool原理

        SharedPool原理:Shared pool和PGA都是由一個Oracle的內存管理器來管理,我們稱之為KGH heap manager。Heap Manager不是一個進程,而是一串代碼。 由于shared pool中最重要的是library cache,所以本文主要講解Library cache的結構,library cach
        推薦度:
        標簽: 原理 數據庫 or
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av片在线观看| 亚洲人成电影在线观看网| 黄网站在线播放视频免费观看| 99久久精品日本一区二区免费| 亚洲综合激情六月婷婷在线观看| 麻豆成人久久精品二区三区免费| 亚洲精品自在线拍| 一二三四免费观看在线电影| 亚洲伊人久久大香线蕉结合| 毛片免费观看网站| 国产精品亚洲一区二区无码| 亚洲精品视频在线看| 最近免费中文字幕MV在线视频3| 亚洲av之男人的天堂网站| 国产在线a不卡免费视频| 亚洲国产精品网站在线播放| 国产成人综合久久精品免费| 乱淫片免费影院观看| 国产成人A人亚洲精品无码| 久久精品免费观看国产| 麻豆狠色伊人亚洲综合网站| 国产极品粉嫩泬免费观看| 黄色视频在线免费观看| 亚洲白色白色在线播放| 成人免费一区二区三区在线观看| 欧亚一级毛片免费看| 亚洲AV成人无码久久精品老人| 国产又黄又爽又猛免费app| 免费毛片毛片网址| 亚洲精品二区国产综合野狼| 国产精品爱啪在线线免费观看| 亚洲av无码日韩av无码网站冲| 国产V亚洲V天堂无码久久久| 国产va免费精品观看精品| 国产亚洲综合久久| 亚洲日本中文字幕| 四虎影院永久免费观看| 免费国产黄网站在线观看可以下载| 亚洲日韩av无码中文| 精品久久久久久亚洲| 国产一区二区三区在线免费 |