oracle體繫結構三部曲之記憶體結構:PGA&UGA

來源:互聯網
上載者:User
  PGA是一個進程專用記憶體,決不允許其他進程訪問。通過C語言的運行時調用malloc()分配,可動態擴縮。而且,PGA絕對不會在oracle的SGA中分配,總是由進程在本地分配。
  
  PGA是介於使用者與oracle執行個體之間的關鍵角色。使用者體驗最敏感的貢獻就在於PGA。

  使用者所發出的請求,執行時,是在pga中執行。若在pga中命中,則無須軟解析,此時稱為軟軟解析。pga中的遊標指向database_buffer_cache中的資料行。返回時,是一批批,而非一條條。

  UGA就是你的工作階段狀態。你的會話總能訪問這部分記憶體。UGA的位置取決你如何串連oracle。如果是專用伺服器串連,UGA在PGA中建立;如果是共用伺服器串連,UGA則在SGA中建立。但在專用伺服器串連中,也不是有串連就分配一個UGA,它依據hash演算法,構造一張hash表,作hash分桶,按需分配。
  
  所以,PGA包含進程記憶體,還可能包含UGA。

  手動PGA記憶體管理受以下參數的控制:

  SQL> show parameters area_size

NAME                                 TYPE                VALUE
------------------------------------ --------------------------------- ------------------------------
bitmap_merge_area_size               integer             1048576             
create_bitmap_area_size                integer             8388608             
hash_area_size                                integer             131072              
sort_area_size                                   integer             65536

  自動記憶體管理不需要再手工設定上述的參數值。而是,如果:
  1)workarea_size_policy設定為auto
  2)pga_aggregate_target設定為非0
  那麼就會引入自動記憶體管理pga。
  對於OLTP,建議使用auto;對於OLAP,建議使用manual。

    pga記憶體配置涉及很多方面,其中只有工作區(包含排序區和雜湊區)在資料庫執行個體的控制之下。pga_aggregate_target是個上限目標,而非啟動時預分配的記憶體大小。你設定了這個值,就意味著你希望oracle能自由使用多大的記憶體來完成排序和雜湊。實際分配的空間可能超過這個值。如果我們已經超過了pga_aggregate_target,oracle對此是睜一隻眼閉一隻眼的,只有當os報告稱再也沒有記憶體時我們的請求才會失敗。oracle睜一隻眼是在做什麼呢?他會識別已經使用的記憶體,相應的減少工作區分配的記憶體大小。如果再請求排序時,就會進行磁碟上I/O了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.