溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)

發(fā)布時(shí)間:2020-08-05 02:58:50 來源:ITPUB博客 閱讀:513 作者:煙花丶易冷 欄目:關(guān)系型數(shù)據(jù)庫

Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA) 




一、內(nèi)存結(jié)構(gòu)
Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
SGA(System Global Area):由所有服務(wù)進(jìn)程和后臺(tái)進(jìn)程共享;
PGA(Program Global Area):由每個(gè)服務(wù)進(jìn)程、后臺(tái)進(jìn)程專有;每個(gè)進(jìn)程都有一個(gè)PGA。


二、SGA
包含實(shí)例的數(shù)據(jù)和控制信息,包含如下內(nèi)存結(jié)構(gòu):
1)Database buffer cache:緩存了從磁盤上檢索的數(shù)據(jù)塊。
2)Redo log buffer:緩存了寫到磁盤之前的重做信息。
3)Shared pool:緩存了各用戶間可共享的各種結(jié)構(gòu)。
4)Large pool:一個(gè)可選的區(qū)域,用來緩存大的I/O請(qǐng)求,以支持并行查詢、共享服務(wù)器模式以及某些備份操作。
5)Java pool:保存java虛擬機(jī)中特定會(huì)話的數(shù)據(jù)與java代碼。
6)Streams pool:由Oracle streams使用。
7)Keep buffer cache:保存buffer cache中存儲(chǔ)的數(shù)據(jù),使其盡時(shí)間可能長。
8)Recycle buffer cache:保存buffer cache中即將過期的數(shù)據(jù)。
9)nK block size buffer:為與數(shù)據(jù)庫默認(rèn)數(shù)據(jù)塊大小不同的數(shù)據(jù)塊提供緩存。用來支持表空間傳輸。

database buffer cache, shared pool, large pool, streams pool與Java pool根據(jù)當(dāng)前數(shù)據(jù)庫狀態(tài),自動(dòng)調(diào)整;
keep buffer cache,recycle buffer cache,nK block size buffer可以在不關(guān)閉實(shí)例情況下,動(dòng)態(tài)修改。


三、PGA
每個(gè)服務(wù)進(jìn)程私有的內(nèi)存區(qū)域,包含如下結(jié)構(gòu):
1)Private SQL area:包含綁定信息、運(yùn)行時(shí)的內(nèi)存結(jié)構(gòu)。每個(gè)發(fā)出sql語句的會(huì)話,都有一個(gè)private SQL area(私有SQL區(qū))
2)Session memory:為保存會(huì)話中的變量以及其他與會(huì)話相關(guān)的信息,而分配的內(nèi)存區(qū)。


四、SGA COMPONENT
(一)、Buffer Cache
1、DB_CACHE_SIZE
    通過參數(shù)DB_CACHE_SIZE可指定DB buffer cache的大小
    ALTER SYSTEM SET DB_CACHE_SIZE=20M scope=both;
    服務(wù)進(jìn)程從數(shù)據(jù)文件讀數(shù)據(jù)到buffer cache;DBWn從buffer cache寫數(shù)據(jù)到數(shù)據(jù)文件。
    buffer cache的四種狀態(tài):
        1)pinned:當(dāng)前塊正在讀到cache或正寫到磁盤,其他會(huì)話等待訪問該塊。
        2)clean:
        3)free/unused:buffer內(nèi)為空,為實(shí)例剛啟動(dòng)時(shí)的狀態(tài)。
        4)dirty:臟數(shù)據(jù),數(shù)據(jù)塊被修改,需要被DBWn刷新到磁盤,才能執(zhí)行過期處理。

同一個(gè)數(shù)據(jù)庫中,支持多種大小的數(shù)據(jù)塊緩存。通過DB_nK_CACHE_SIZE參數(shù)指定,如
    ? DB_2K_CACHE_SIZE
    ? DB_4K_CACHE_SIZE
    ? DB_8K_CACHE_SIZE
    ? DB_16K_CACHE_SIZE
    ? DB_32K_CACHE_SIZE
標(biāo)準(zhǔn)塊緩存區(qū)大小由DB_CACHE_SIZE指定。如標(biāo)準(zhǔn)塊為nK,則不能通過DB_nK_CACHE_SIZE來指定標(biāo)準(zhǔn)塊緩存區(qū)的大小,應(yīng)由DB_CACHE_SIZE指定。
例,標(biāo)準(zhǔn)塊為8K,則數(shù)據(jù)庫可以設(shè)置的塊緩存大小的參數(shù)如下:
    ? DB_CACHE_SIZE (指定標(biāo)準(zhǔn)塊(這里為8K)的緩存區(qū))
    ? DB_2K_CACHE_SIZE (指定塊大小為2K的緩存區(qū))
    ? DB_4K_CACHE_SIZE (指定塊大小為4K的緩存區(qū))
    ? DB_16K_CACHE_SIZE (指定塊大小為16K的緩存區(qū))
    ? DB_32K_CACHE_SIZE (指定塊大小為32K的緩存區(qū))

2、多種緩沖池(buffer pool)
    1)Keep:通過db_keep_cache_size參數(shù)指定。
    該buffer內(nèi)的數(shù)據(jù)可能被重用,以降低I/O操作。該池的大小要大于指定到該池的段的總和。
       讀入到keep buffer的塊不需要過期操作。
    2)Recycle:通過db_recycle_cache_size參數(shù)指定。
    該池中的數(shù)據(jù)被重用機(jī)會(huì)較小,該池大小要小于分配到該池的段的總和。讀入該池的塊需要經(jīng)常執(zhí)行過期處理。
    3)Default:相當(dāng)于一個(gè)沒有Keep與Recycle池的實(shí)例的buffer cache,通過db_cache_size參數(shù)指定。

3、為對(duì)象明確指定buffer pool
    buffer_pool子句,用來為對(duì)象指定默認(rèn)的buffer pool,是storage子句的一部分。
       對(duì)create與alter table、cluster、index語句有效。
    如果現(xiàn)有對(duì)象沒有明確指定buffer pool,則默認(rèn)都指定為default buffer pool,大小為DB_CACHE_SIZE參數(shù)設(shè)置的值。
語法:
    a.CREATE INDEX cust_idx ON tt(id) STORAGE (BUFFER_POOL KEEP);
    b.ALTER TABLE oe.customers STORAGE (BUFFER_POOL RECYCLE);
    c.ALTER INDEX oe.cust_lname_ix STORAGE (BUFFER_POOL KEEP);
(二)、Share Pool
1、SHARE_POOL_SIZE
   1)Share Pool可通過SHARE_POOL_SIZE參數(shù)指定:
  SQL> alter system set shared_pool_size=20M scope=both;
   2)Share Pool保存的信息被多個(gè)會(huì)話共享,類型包括:
  a.Library Cache
Library Cache又包含共享SQL區(qū)與PL/SQL區(qū):
a).共享SQL區(qū)保存了分析與編譯過的SQL語句。
b).PL/SQL區(qū)保存了分析與編譯過的PL/SQL塊(過程和函數(shù)、包、觸發(fā)器與匿名PL/SQL塊)。
  b.Data Dictionary Cache
保存了數(shù)據(jù)字典對(duì)象的定義。
  c.UGA(User Global Area)
UGA內(nèi)包含了共享服務(wù)器模式下的會(huì)話信息。
共享服務(wù)器模式時(shí),如果large pool沒有配置,則UGA保存在Share Pool中。

(三)、Large Pool  Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
1)Large Pool大小通過LARGE_POOL_SIZE參數(shù)指定:
SQL> alter system set large_pool_size=20m scope=both;
2)作用:
a.為I/O服務(wù)進(jìn)程分配內(nèi)存
b.為備份與恢復(fù)操作分配內(nèi)存
c.為Oracle共享服務(wù)器模式與多個(gè)數(shù)據(jù)庫間的聯(lián)機(jī)事務(wù)分配內(nèi)存。
通過從large pool中為共享服務(wù)器模式分配會(huì)話內(nèi)存,可以減少share pool因頻繁為大對(duì)象分配和回收內(nèi)存而產(chǎn)生的碎片。將大的對(duì)象從share pool中分離出來,可以提高shared pool的使用效率,使其可以為新的請(qǐng)求提供服務(wù)或者根據(jù)需要保留現(xiàn)有的數(shù)據(jù)。

(四)、Java Pool           Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
1、JAVA_POOL_SIZE
     通過JAVA_POOL_SIZE參數(shù)指定java pool大小。
          保存了jvm中特定會(huì)話的java code和數(shù)據(jù)。
2、在編譯數(shù)據(jù)庫中的java代碼和使用數(shù)據(jù)庫中的java資源對(duì)象時(shí),都會(huì)用到share pool。
        java的類加載程序?qū)γ總€(gè)加載的類會(huì)使用大約8K的空間。
       系統(tǒng)跟蹤運(yùn)行過程中,動(dòng)態(tài)加載的java類,也會(huì)使用到share pool。

(五)、Redo Log Buffer
1、服務(wù)進(jìn)程從用戶空間拷貝每條DML/DDL語句的redo條目到redo log buffer中。
2、redo log buffer是一個(gè)可以循環(huán)使用的buffer,服務(wù)進(jìn)程拷貝新的redo覆蓋掉redo log buffer中已通過LGWR寫入磁盤(online redo log)的條目。
3、導(dǎo)致LGWR執(zhí)行寫redo log buffer到online redo log的條件
a.用戶執(zhí)行事務(wù)提交commit
b.每3秒鐘或redo log buffer內(nèi)已達(dá)到1/3滿或包含1MB數(shù)據(jù)
c.DBWn進(jìn)程將修改的緩沖區(qū)寫入磁盤時(shí)(如果相應(yīng)的重做日志數(shù)據(jù)尚未寫入磁盤)

(六)、ASMM(Automatic Shared Memory Management)
1、SGA_TARGET
      1)SGA_TARGET默認(rèn)值為0,即ASMM被禁用。需要手動(dòng)設(shè)置SGA各中各組件的大小。
      2)當(dāng)SGA_TARGET為非0時(shí),則啟用ASMM,自動(dòng)調(diào)整以下各組件大?。?/span>
    DB buffer cache(default pool)
    shared pool
    large pool
    streams pool
    java pool
           但ASSM中, 以下參數(shù)仍需要手動(dòng)指定:
    log buffer
    keep、recycle、以及非標(biāo)準(zhǔn)塊緩沖區(qū)
    固定SGA以及其他內(nèi)部分配。
2、啟用ASMM需要將STATISTICS_LEVEL設(shè)置成TYPICAL或ALL
3、啟用ASMM,自動(dòng)調(diào)整SGA內(nèi)部組件大小后。若手動(dòng)指定某一組件值,則該值為該組件的最小值。如
手動(dòng)設(shè)置SGA_TARGET=8G,SHARE_POOL_SIZE=1G,則ASMM在自動(dòng)調(diào)整SGA內(nèi)部組件大小時(shí),保證share pool不會(huì)低于1G。
SQL> SELECT component, current_size/1024/1024 size_mb FROM   v$sga_dynamic_components;
4、SGA_MAX_SIZE
SGA_MAX_SIZE指定內(nèi)存中可以分配給SGA的最大值。
SGA_TARGET是一個(gè)動(dòng)態(tài)參數(shù),其最大值為SGA_MAX_SIZE指定的值。

五、PGA
Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
 
(一)Private SQL Area
1、保存了當(dāng)前會(huì)話的綁定信息以及運(yùn)行時(shí)內(nèi)存結(jié)構(gòu)。這些信息
2、每個(gè)執(zhí)行sql語句的會(huì)話,都有一個(gè)private sql area。
3、當(dāng)多個(gè)用戶執(zhí)行相同的sql語句,此sql語句保存在一個(gè)稱為shared sql area。此share sql area被指定給這些用戶的private sql area
4、共享服務(wù)器模式:private sql area位于SGA的share pool或large pool中
     專用服務(wù)器模式:private sql area位于PGA中
(二)Cursor、SQL Areas
(三)Work Area    
PGA的一大部分被分配給Work Area,用來執(zhí)行如下操作:
    a.基于操作符的排序,group by、order by、rollup和窗口函數(shù)。
      參數(shù)為sort_area_size  
    b.hash散列連接,
      參數(shù)為hash_area_size     
    c.位圖合并,
      參數(shù)為bitmap_merge_area_size
    d.位圖創(chuàng)建,
      參數(shù)為create_bitmap_area_size 
    e.批量裝載操作使用的寫緩存
(四)Session memory
  保存了會(huì)話的變量,如登錄信息及其他與會(huì)話相關(guān)的信息,共享服務(wù)器模式下,Session memory是共享的。

(五)自動(dòng)PGA管理
設(shè)置PGA_AGGREGATE_TARGET為非0,則啟用PGA自動(dòng)管理,并忽略所有*_area_size的設(shè)置。如sort_area_size,hash_area_size等。
默認(rèn)為啟用PGA的自動(dòng)管理,Oracle根據(jù)SGA的20%來動(dòng)態(tài)調(diào)整PGA中專用與Work Area部分的內(nèi)存大小,最小為10MB。
用于實(shí)例中各活動(dòng)工作區(qū)(work area)的PGA總量,為PGA_AGGREGATE_TARGET減去其他組件分配的PGA內(nèi)存。得到的結(jié)果,按照特定需求動(dòng)態(tài)分配給對(duì)應(yīng)的工作區(qū)。
1)設(shè)置PGA_AGGREGATE_TARGET大小的步驟
a.設(shè)置PGA_AGGREGATE_TARGET為SGA的20%,對(duì)于DSS系統(tǒng),此值可能過低。
b.運(yùn)行典型的負(fù)載,通過oracle收集的pga統(tǒng)計(jì)信息來調(diào)整PGA_AGGREGATE_TARGET的值。
c.根據(jù)oracle的pga建議調(diào)整PGA_AGGREGATE_TARGET大小。
2)禁用自動(dòng)pga管理
為向后兼容,設(shè)置PGA_AGGREGATE_TARGET為0,即禁用pga的自動(dòng)管理??墒褂藐P(guān)聯(lián)的*_area_size參數(shù)調(diào)整對(duì)應(yīng)工作區(qū)的最大大小。
bitmap_merge_area_size
create_bitmap_area_size
hash_area_size
sort_area_size  



Oracle的內(nèi)存結(jié)構(gòu),除了SGA(System Global Area)之外,Oracle進(jìn)程還使用下面三個(gè)全局區(qū):
PGA: process global area
UGA: user global area
CGA: call global area

1. PGA與UGA
很多人都搞不清楚PGAUGA兩者之間的區(qū)別,實(shí)際上兩者之間的區(qū)別跟一個(gè)進(jìn)程和一個(gè)會(huì)話之間的區(qū)別是類似.盡管說進(jìn)程和會(huì)話之間一般都是一對(duì)一的關(guān)系,但實(shí)際上比這個(gè)更復(fù)雜.一個(gè)很明顯的情況是MTS配置,會(huì)話往往會(huì)比進(jìn)程多得多.在這種配置下,每一個(gè)進(jìn)程會(huì)有一個(gè)PGA,每一個(gè)會(huì)話會(huì)有一個(gè)UGAPGA所包含的信息跟會(huì)話是無任何關(guān)聯(lián)的UGA包含的信息是以特定的會(huì)話為基礎(chǔ)的.

2. PGA
進(jìn)程全局區(qū)(PGA)即可以理解為Process Global Area,也可以理解為Program Global Area.它的內(nèi)存段是在進(jìn)程私有區(qū)(Process Private Memory)而不是在共享區(qū)(Shared Memory). 每個(gè)Oracle的server process都有屬于自己的PGA,它只包含了本進(jìn)程的相關(guān)特定信息.PGA中的結(jié)構(gòu)不需要由latches來保護(hù),因?yàn)槠渌倪M(jìn)程是不能進(jìn)入到這里面來訪問的.

PGA包含兩個(gè)主要區(qū)域:Fixed PGA和Variable PGA或稱為PGA Heap
Fixed PGA的作用跟Fixed SGA是類似的,都包含原子變量(不可分的),小的數(shù)據(jù)結(jié)構(gòu)和指向Variable PGA的指針.
Variable PGA是一個(gè)堆.它的Chunks可以從Fixed Table X$KSMPP查看得到,這個(gè)表的結(jié)構(gòu)跟前面有提到的X$KSMSP是相同的. PGA HEAP包含了一些有關(guān)Fixed Table的永久性內(nèi)存,它跟某些參數(shù)的設(shè)置有依賴關(guān)系.這些參數(shù)包含DB_FILES,LOG_FILES,CONTROL_FILES.

3. UGA
UGA(User Global Area)包含的是特定會(huì)話的信息。

跟PGA一樣,UGA也由兩區(qū)組成:Fixed UGA和Variable UGA,也稱為UGA HEAP. Fixed UGA包含了大約70個(gè)原子變量,小的數(shù)據(jù)結(jié)構(gòu)和指向Variable UGA的指針. 

UGA HEAP中的Chunks可以從它們自己的會(huì)話中通過查看表X$KSMUP獲得相關(guān)信息,這個(gè)表的結(jié)構(gòu)跟X$KSMSP是一樣的.UGA HEAP包含了一些有關(guān)fixed tables的永久性內(nèi)存段,跟一些參數(shù)的設(shè)置有依賴關(guān)系.這些參數(shù)有OPEN_CURSORS,OPEN_LINKS,和MAX_ENABLE_ROLES. 

UGA在內(nèi)存中的位置依賴于會(huì)話的配置方式.
如果會(huì)話連接的配置方式是專用服務(wù)器模式(DDS)即是一個(gè)會(huì)話對(duì)應(yīng)一個(gè)進(jìn)程,則UGA是放在PGA中的. 在PGA中, Fixed UGA是其中的一個(gè)Chunk, 而UGA HEAP是PGA的一個(gè)子堆(Subheap). 

如果會(huì)話連接是配置為共享服務(wù)器模式(MTS), Fixed UGA是SHARED POOL或者Large pool中的一個(gè)Chunk, 而UGA HEAP則是SHARED POOL或者large pool中的子堆(Subheap). 

4. CGA

跟其它的全局區(qū)不同,Call Global Area是短暫性存在的.它只有在函數(shù)調(diào)用期間存在,一般是在對(duì)實(shí)例的最低級(jí)別的調(diào)用時(shí)才需要CGA,比如:分析一個(gè)SQL語句,執(zhí)行一個(gè)SQL語句,取出一個(gè)SELECT語句的輸出

一個(gè)單獨(dú)的CGA在遞歸調(diào)用時(shí)是需要的.SQL語句的分析過程中,對(duì)數(shù)據(jù)字典信息的遞歸調(diào)用是需要的,因?yàn)橐獙?duì)SQL語句進(jìn)行語法分析,還有在語句的優(yōu)化期間要計(jì)算執(zhí)行計(jì)劃.執(zhí)行PL/SQL塊時(shí)在處理SQL語句的執(zhí)行時(shí)也是需要遞歸調(diào)用的,DML語句的執(zhí)行時(shí)要處理觸發(fā)器執(zhí)行也是需要遞歸調(diào)用的.

不管UGA是放在PGA中還是在SGA,CGA都是PGA的一個(gè)子堆(Subheap).這個(gè)事實(shí)的一個(gè)重要推論是在一個(gè)調(diào)用的期間會(huì)話必須是一個(gè)進(jìn)程.對(duì)于在一個(gè)MTSOracle數(shù)據(jù)庫進(jìn)程應(yīng)用開發(fā)時(shí)關(guān)于這一點(diǎn)的理解是很重要的.如果相應(yīng)的調(diào)用較多,就得增加processes的數(shù)量以適應(yīng)調(diào)用的增加. 

沒有CGA中的數(shù)據(jù)結(jié)構(gòu),CALLS是沒法工作的而實(shí)際上跟一次CALL相關(guān)的數(shù)據(jù)結(jié)構(gòu)一般都是放在UGA,SQL AREA,PL/SQL AREASORT AREA, hash area, bitmap area它們都必須在UGA因?yàn)樗鼈円诟?span>CALLS之間要一直存在并且可用CGA中所包含的數(shù)據(jù)結(jié)構(gòu)是要在一次CALL結(jié)束后能夠釋放的例如CGA包含了關(guān)于遞歸調(diào)用的信息,直接I/O BUFFER等還有其它的一些臨時(shí)性的數(shù)據(jù)結(jié)構(gòu). 

5. 總結(jié)一下

PGA包括:
1)Fixed PGA
2)UGA (dedicated server),當(dāng)系統(tǒng)是shared server時(shí),UGA位于shared pool或者large pool。
3)CGA

而UGA和CGA都屬于Variable PGA(PGA heap)

UGA包括:

1)Fixed UGA
2)private SQL area
3)session memory
4)SQL Work Areas

private SQL area, session memory, SQL work ares都屬于variable UGA(UGA heap).

6. private SQL area
可以分為兩部分:
1)永久內(nèi)存區(qū)域:存放相同SQL語句多次執(zhí)行時(shí)都需要的一些游標(biāo)信息,比如綁定變量等。這部分內(nèi)存只有在游標(biāo)被關(guān)閉時(shí)才釋放。所以稱為:永久內(nèi)存區(qū)域。

2)運(yùn)行時(shí)區(qū)域:處理SQL語句時(shí)的第一步要?jiǎng)?chuàng)建運(yùn)行時(shí)區(qū)域,這里存放了當(dāng)SQL運(yùn)行時(shí)所使用的信息。對(duì)于DML語句,SQL執(zhí)行完畢就釋放該區(qū)域;對(duì)于select語句,當(dāng)所有數(shù)據(jù)行返回給用戶時(shí)釋放。

7. session area
保存該session的一些參數(shù),比如:修改的NLS參數(shù),修改的優(yōu)化器參數(shù)optimizer_mode,alter session命令所啟用的跟蹤信息,可以使用的roles,所打開的db links,真正使用的package等。

8. SQL work area
SQL工作區(qū)是UGA中最重要的部分,占UGA的大部分內(nèi)存。主要是在排序sort(ordr by, group by),hash-join時(shí)使用。SQL工作區(qū)的大小對(duì)性能的影響很大。

一般大數(shù)量的排序,是不太可能完全在SQL work area中完成的,因?yàn)闆]有那么大的內(nèi)存,所以一般都會(huì)使用臨時(shí)表空間,將排序的中間結(jié)果寫入到temp表空間中(磁盤排序)。根據(jù)SQL work area的大小,使用臨時(shí)表空間的次數(shù)可以是一次,也可能是多次。所以有三種情況:

1)optimal: 排序完全在內(nèi)存中完成;
2)onepass: 排序完成,需要使用磁盤一次;
3)multipass: 排序的完成,需要使用磁盤多次;

optimal一般是不太現(xiàn)實(shí)的,我們一般盡量保證onepass,如果導(dǎo)致了multipass,則性能會(huì)下降很多。我們先來看看排序的過程:

排序算法采用的是堆排序;排序方式是分批排序,比如10000條記錄排序,把它分成100次,每次對(duì)100條記錄排序;當(dāng)100條排序完成之后,寫入到temp表空間;再對(duì)下100條排序,排序完之后在寫入到temp表空間;最后對(duì)temp表空間的100個(gè)局部排序的隊(duì)列進(jìn)行merge操作。從而完成對(duì)10000條記錄的排序。這樣是比較理想的情況,因?yàn)橹粚?duì)磁盤讀寫一次,屬于onepass。如果排序涉及到磁盤的多次讀寫,則屬于multipass。一般我們盡量調(diào)整sort_area_size的大小,來避免multipass排序。

SQL work area可以分為下面幾個(gè)部分:

排序區(qū)(sort_area_size),hash區(qū)(hash_area_size),bitmap區(qū)(create_bitmap_area_size,bitmap_merge_area_size)等,他們深刻的影響著排序、hash-join、bitmap等的性能。

9. PGA的自動(dòng)管理
在Oracle9i之前,我們是通過設(shè)置sort_area_size, hash_area_size等參數(shù)來管理PGA。

SQL> show parameter 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

workarea_size_policy                 string      AUTO

SQL> show parameter sort_area;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

sort_area_retained_size              integer     0

sort_area_size                       integer     65536


而從Oracle9i開始,Oracle引入了PGA的自動(dòng)管理。不需要我們單獨(dú)地設(shè)置大小了。


設(shè)置參數(shù)workarea_size_policy參數(shù),可以在PGA自動(dòng)(auto默認(rèn)是auto)和PGA手動(dòng)管理(manual)之間進(jìn)行選擇。

然后通過初始化參數(shù)pga_aggregate_size來設(shè)置PGA的內(nèi)存總和(相當(dāng)于SGA的sga_max_size)。注意在Oracle9i時(shí),PGA自動(dòng)管理只對(duì)dedicate server有效,對(duì)shared server無效,但是在Oracle10g時(shí),PGA自動(dòng)管理都有效。

10. PGA大小設(shè)置:

對(duì)于OLTP系統(tǒng),典型的PGA內(nèi)存為:

PGA_AGGREGATE_SIZE = (total_memory * 80%) * 20%

對(duì)于OLAP系統(tǒng),由于會(huì)運(yùn)行一些很大的查詢:

PGA_AGGREATE_SIZE = (total_memoery * 80%) * 50%

80%是指,將機(jī)器總內(nèi)存的80%分給Oracle使用。然后在將80%中的20%給PGA。

我們也可以使用PGA相關(guān)的一些視圖來調(diào)整pga_aggregate_size的大?。?/span>

v$pgastat, v$pga_target_advice, v$pga_target_advice_histogram  

使用v$pgastat查看當(dāng)前PGA的統(tǒng)計(jì)信息(類似于v$sgastat和SGA):

SQL> select * from v$pgastat;


NAME                                          VALUE UNIT

---------------------------------------- ---------- ------------

aggregate PGA target parameter             71303168 bytes

aggregate PGA auto target                  27297792 bytes

global memory bound                        14260224 bytes

total PGA inuse                            40966144 bytes

total PGA allocated                        88008704 bytes

maximum PGA allocated                     125034496 bytes

total freeable PGA memory                   4259840 bytes

process count                                    23

max processes count                              40

PGA memory freed back to OS               492634112 bytes

total PGA used for auto workareas                 0 bytes

maximum PGA used for auto workareas         6105088 bytes

total PGA used for manual workareas               0 bytes

maximum PGA used for manual workareas             0 bytes

over allocation count                             0

bytes processed                          6275959808 bytes

extra bytes read/written                          0 bytes

cache hit percentage                            100 percent

recompute count (total)                       33814

19 rows selected.
maximum PGA allocated:PGA曾今達(dá)到的最大值

over allocation count: Over allocating PGA memory can happen if the value ofPGA_AGGREGATE_TARGET is too small. When this happens, the Oracle Database cannot honor the value of PGA_AGGREGATE_TARGET and extra PGA memory needs to be allocated. If over allocation occurs, then increase the value of PGA_AGGREGATE_TARGET using the information provided by the V$PGA_TARGET_ADVICE view.
extra bytes read/written: Number of bytes processed during extra passes of the input data, cumulated since instance startup. When a work area cannot run optimal, one or more of these extra passes is performed. (即磁盤排序的讀寫磁盤的字節(jié)數(shù))

使用v$pga_target_advice來估測(cè)PGA的大小,即PGA的建議值(類似于v$sga_target_advice和SGA):
V$PGA_TARGET_ADVICE predicts how the cache hit percentage and over allocation count statistics displayed by the V$PGASTAT performance view would be impacted if the value of the PGA_AGGREGATE_TARGET parameter is changed. The prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.

SQL> select round(pga_target_for_estimate/(1024*1024)) target_size_M,
  2  estd_pga_cache_hit_percentage est_cache_hit_percentage,
  3  round(estd_extra_bytes_rw/(1024*1024)) est_extra_read_write_M,
  4  estd_overalloc_count est_over_alloc from v$pga_target_advice;

TARGET_SIZE_M EST_CACHE_HIT_PERCENTAGE EST_EXTRA_READ_WRITE_M EST_OVER_ALLOC
------------------  ---------------------------   ---------------------- --------------
           17                       97                    186             31
           34                       97                    186             31
           51                      100                      0              2
           68                      100                      0              0
           82                      100                      0              0
           95                      100                      0              0
          109                      100                      0              0
          122                      100                      0              0
          136                      100                      0              0
          204                      100                      0              0
          272                      100                      0              0
          408                      100                      0              0
          544                      100                      0              0

13 rows selected.

使用v$pga_target_advice_histogram來估測(cè)PGA的大小(類似于v$sga_target_advice和SGA):



V$PGA_TARGET_ADVICE_HISTOGRAM predicts how statistics displayed by the V$SQL_WORKAREA_HISTOGRAM dynamic view would be impacted if the value of thePGA_AGGREGATE_TARGET parameter is changed. This prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.


該視圖可以通過對(duì)不同工作區(qū)大小的采樣評(píng)估提供統(tǒng)計(jì)信息共分析使用SQL在工作區(qū)中以3種方式執(zhí)行:

Optimal(優(yōu)化方式):指所有處理可以在內(nèi)存中完成;Onepass:大部分操作可以在內(nèi)存中完成,但是需要使用到磁盤排序;Multipass:大量操作需要產(chǎn)生磁盤交互,性能極差。


      





About Me

...............................................................................................................................

● 本文整理自網(wǎng)絡(luò)

● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個(gè)人微信公眾號(hào)(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 數(shù)據(jù)庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯(lián)系我請(qǐng)加QQ好友(646634621),注明添加緣由

● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章內(nèi)容來源于小麥苗的學(xué)習(xí)筆記,部分整理自網(wǎng)絡(luò),若有侵權(quán)或不當(dāng)之處還請(qǐng)諒解

● 版權(quán)所有,歡迎分享本文,轉(zhuǎn)載請(qǐng)保留出處

...............................................................................................................................

拿起手機(jī)使用微信客戶端掃描下邊的左邊圖片來關(guān)注小麥苗的微信公眾號(hào):xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學(xué)習(xí)最實(shí)用的數(shù)據(jù)庫技術(shù)。

Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)

Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)
Oracle體系結(jié)構(gòu)之內(nèi)存結(jié)構(gòu)(SGA、PGA)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI