<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Oracle認證:Oracle內存結構研究-PGA篇

    時間:2024-09-22 06:12:43 Oracle認證 我要投稿
    • 相關推薦

    Oracle認證:Oracle內存結構研究-PGA篇

      一、概述

    Oracle認證:Oracle內存結構研究-PGA篇

      SGA,PGA,UGA都是Oracle管理的內存區。

      SGA(System Global Area),即系統全局區,Oracle中最重要的內存區。

      PGA(Process Global Area),即程序全局區,一個進程的專用的內存區。

      UGA(User Global Area),即用戶全局區,與特定的會話相關聯。

      專用服務器連接模式,UGA在PGA中分配。

      共享服務器連接模式,UGA在SGA中的Large Pool中分配。

      如果采用專用服務器連接模式,PGA中包含UGA,其他區域用來排序,散列和位圖合并。

      簡單來講,PGA=UGA+排序區+散列區+位圖合并區。

      二、PGA的管理模式

      PGA分兩種管理模式:

      1) 手動PGA內存管理,用戶指定排序區和散列區所使用的內存,每個連接使用相同的內存。

      2) 自動PGA內存管理,告訴Oracle可以使用的PGA的總量,由Oraclce根據系統負載決定具體分配。

      9iR1時默認為手動PGA內存管理,9iR2以后默認為自動PGA內存管理。

      PGA內存可以動態擴大和回收。

      PGA內存管理模式由WORKAREA_SIZE_POLICY控制。

      1) 設為MANUAL,啟用手動內存管理。

      2) 設為AUTO,并且PGA_AGGREGATE_TARGET不為0時,啟用自動內存管理。

      三、手動PGA內存管理

      有三個參數對PGA影響最大。

      SORT_AREA_SIZE:對信息排序所用的內存總量

      SORT_AREA_RETAINED_SIZE:排序后在內存中保存排序信息的內存總量。

      HASH_AREA_SIZE:存儲散列列表所用的內存量。

      下面對這三個參數進行說明:

      1) SORT_AREA_SIZE:

      如果SORT_AREA_SIZE設為512KB,SORT_AREA_RETAINED_SIZE也為512KB,則Oracle使用512KB的內存進行排序,排序后所有數據都留在內存中。

      2) SORT_AREA_RETAINED_SIZE:

      如果SORT_AREA_SIZE設為512KB,SORT_AREA_RETAINED_SIZE設為384KB,則Oracle使用512KB的內存進行排序,然后保留384KB的已排序數據,另外512KB-384KB=128KB的已排序數據會寫到臨時表空間中。

      如果SORT_AREA_RETAINED_SIZE沒有設置,則它的值為0,但是實際保留的排序數據和SORT_AREA_SIZE相同。

      3) HASH_AREA_SIZE:

      一個大集合和另個集合進行連接時,會用到HASH_AREA_SIZE參數。較小的 表會放到這部分內存中作為驅動表,然后大表進行探索(PROBE)操作進行連接。如果HASH_AREA_SIZE過小會影響兩個集合(表)連接時的性能。

      注意點:

      1) 如果需要排序的數據量大于SORT_AREA_SIZE,Oracle會分批進行排序。把當前已排序的數據保存到臨時表空間中,然后對剩余的數據進行排序。最后,還會對這些保存在臨時表空間中的已排序數據再進行排序,因為每次保存到臨時表空間中的已排序數據只是部分數據的排序,對整體需排序的數據來說只是部分局部有序。

      2) *_AREA_SIZE只是對某個操作的限制,一個查詢可能有多個操作,每個操作都有自己的內存區。如果SORT_AREA_SIZE設為5MB,一個查詢可能會有10個排序操作,這樣一個查詢會占用50MB的排序內存。

      3) 3,*_AREA_SIZE內存的分配是按需分配。如果一個查詢需要5MB內存進行排序,就算分配1G的SORT_AREA_SIZE也不會全部使用,只會使用需要的5MB的內存量。

      四、自動PGA內存管理

      要啟用自動PGA內存管理,設置下列參數:

      1,WORKAREA_SIZE_POLICY=AUTO

      2,PGA_AGGREGATE_TARGET=非零

      有關PGA_AGGREGATE_TARGET:

      1) PGA_AGGREGATE_TARGET是一個目標值。連接數少的時候實際分配PGA內存會比它要小。連接數多的時候實際分配的PGA內存會比它要大,但是Oracle會努力保持總PGA保持在PGA_AGGREGATE_TARGET值內。

      例如,PGA_AGGREGATE_TARGET 設為300MB。5個用戶連接時,每個用戶可能分配10MB的PGA內存,共分配50MB的PGA內存。300個用戶連接時每個用戶可能分配1.3MB的 PGA內存,共分配390MB的PGA內存。當用戶連接多時,Oracle會降低每個用戶的PGA內存使用量。

      2) 一個串行查詢(非并行查詢)可能包括多個排序/散列操作,每個排序/散列操作最多使用5%的PGA內存。

      3) 一個并行查詢最多可用到30%的PGA內存,無論有多少并行進程。

      五、手動PGA內存管理與自動PGA內存管理

      自動PGA內存管理相對于手動PGA內存管理有很多優點

      1, 當用戶連接少時

      a) 手動PGA內存管理不管有多少可用內存都按照預設值進行分配。比如當前空閑內存為300MB,連接需要10MB的內存進行排序,而我們設定的排序區大小為5MB,導致雖然有足夠的空閑內存卻無法分配給當前連接,造成執行效率低下。

      b) 自動PGA內存管理會根據當前空閑內存來進行分配。當空閑內存為300MB,當前用戶需要10MB內存進行排序,Oracle就會分配10MB內存給當前用戶。

      2, 當用戶連接多時

      a) 手動PGA內存管理會完全按照預設值分配內存。如果物理內存總量為1G,排序區設為5MB,當有300個用戶連接時,Oracle會分配1.5G的內存,這已經超過了我們的實際物理內存!

      b) 自動PGA內存管理會根據當前連接情況進行分配。如果物理內存總量為1G,PGA_AGGREGATE_TARGET為300MB,當用戶數從10升到 300時,每個用戶連接的內存會從滿足需要的10MB慢慢減少到1.3MB,雖然最后總量也會超過PGA_AGGREGATE_TARGET,但比起手動 PGA內存管理要好很多了。

      什么時候使用自動PGA內存管理?什么時候使用手動PGA內存管理?

      白天系統正常運行時適合使用自動PGA內存管理,讓Oracle根據當前負載自動管理、分配PGA內存。

      夜里用戶數少、進行維護的時候可以設定當前會話使用手動PGA內存管理,讓當前的維護操作獲得盡可能多的內存,加快執行速度。

      如:服務器平時運行在自動PGA內存管理模式下,夜里有個任務要大表進行排序連接后更新,就可以在該操作session中臨時更改為手動PGA內存管理,然后分配大的SORT_AREA_SIZE和HASH_AREA_SIZE(50%甚至80%內存,要確保無其他用戶使用),這樣能大大加快系統運行速度,又不影響白天高峰期對系統造成的影響。

      六、操作命令

      系統級更改:

      ALTER SYSTEM SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};

      ALTER SYSTEM SET PGA_AGGREGATE_TARGET=100000000;

      ALTER SYSTEM SET SORT_AREA_SIZE = 65536 SCOPE = SPFILE;

      ALTER SYSTEM SET HASH_AREA_SIZE = 65536 SCOPE = SPFILE;

      會話級更改

      ALTER SESSION SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};

      ALTER SESSION SET SORT_AREA_SIZE = 65536;

      ALTER SESSION SET HASH_AREA_SIZE = 65536;

      七、學以致用

      1,排序區:

      pga_aggregate_target為100MB,單個查詢能用到5%也就是5MB時排序所需時間

      SQL> create table sorttable as select * from all_objects;

      表已創建。

      SQL> insert into sorttable (select * from sorttable);

      已創建49735行。

      SQL> insert into sorttable (select * from sorttable);

      已創建99470行。

      SQL> set timing on;

      SQL> set autotrace traceonly;

      SQL> select * from sorttable order by object_id;

      已選擇198940行。

      已用時間: 00: 00: 50.49

      Session級修改排序區為30mb所需時間

      SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;

      會話已更改。

      已用時間: 00: 00: 00.02

      SQL> ALTER SESSION SET SORT_AREA_SIZE = 30000000;

      會話已更改。

      已用時間: 00: 00: 00.01

      SQL> select * from sorttable order by object_id;

      已選擇198940行。

      已用時間: 00: 00: 10.76

      可以看到所需時間從50.49秒減少到10.31秒,速度提升很明顯。

      2,散列區:

      pga_aggregate_target為100MB,單個查詢能用到5%也就是5MB時表連接所需時間

      SQL> select /*+ use_hash(tb1 tb2)*/ * from sorttable tb1,sorttable tb2 where tb1.object_id=tb2.object_id;

      已選擇49735行。

      已用時間: 00: 00: 40.50

      Session級修改散列區為30mb所需時間

      SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;

      會話已更改。

      已用時間: 00: 00: 00.01

      SQL> ALTER SESSION SET HASH_AREA_SIZE = 30000000;

      會話已更改。

      已用時間: 00: 00: 00.01

      SQL> select /*+ use_hash(tb1 tb2)*/ * from sorttable tb1,sorttable tb2 where tb1.object_id=tb2.object_id;

      已選擇49735行。

      已用時間: 00: 00: 04.47

      所需時間由40.50秒提升到4.47秒,效果同樣很明顯。

      備注:以上實驗皆執行全表掃描保證相關表讀入緩沖區中,避免因數據沒讀入緩存造成誤差。

      結論:在9iR2版以后,PGA不再像以前那樣困擾DBA了,Oracle會幫我們做好PGA的分配。但這并不意味著DBA不需要深入了解PGA了,掌握PGA并根據適當應用會讓工作如虎添翼。

    【Oracle認證:Oracle內存結構研究-PGA篇】相關文章:

    Oracle認證:ORACLE綁定變量BINDPEEKING03-08

    Oracle認證作用03-19

    Oracle認證簡介11-30

    Oracle最新認證03-09

    Oracle認證途徑03-20

    Oracle認證:Oracle控制件文件修復03-18

    Oracle認證:Oracle避免全表掃描方式03-08

    Oracle認證職業前景03-19

    Oracle認證考試技巧03-19

    主站蜘蛛池模板: 国产精品无码专区在线观看| 99精品在线播放| 国产人妖乱国产精品人妖| 日韩视频中文字幕精品偷拍| 色婷婷噜噜久久国产精品12p| 国产精品禁18久久久夂久| 特级精品毛片免费观看| 精品无人区麻豆乱码1区2区| 精品麻豆丝袜高跟鞋AV| 国产精品 猎奇 另类视频| 92精品国产自产在线观看| 97精品国产自在现线免费观看| 亚洲国产精品无码久久久蜜芽 | 久久久久99精品成人片三人毛片| 亚洲精品无码久久久| 国产福利精品视频自拍 | 久久丫精品国产亚洲av不卡| 秋霞久久国产精品电影院| 欧洲精品视频在线观看| 日韩精品亚洲人成在线观看| 蜜桃麻豆www久久国产精品| 亚洲国产精品无码专区| 国内精品视频九九九九| 最新欧美性爱精品一区二区三区| 国内精品久久久久久久影视麻豆 | 无码欧精品亚洲日韩一区夜夜嗨 | 精品无码久久久久久久久久| 欧美日韩在线亚洲国产精品| 无码国产69精品久久久久网站| 久久丝袜精品中文字幕| 亚洲欧美日韩国产精品| 日韩精品无码一区二区三区免费 | 亚洲国产精品狼友中文久久久| 久久99精品国产99久久| 国产成人精品优优av| 久久精品中文騷妇女内射| 欧美日韩人妻精品一区二区在线| 激情亚洲一区国产精品| 国产精品永久久久久久久久久| 91亚洲精品麻豆| 欧美亚洲国产成人精品|