1、內存結構java
SGA(System Global Area):由全部服務進程和後臺進程共享;
PGA(Program Global Area):由每一個服務進程、後臺進程專有;每一個進程都有一個PGA。sql
2、SGA
包含實例的數據和控制信息,包含以下內存結構:
1)Database buffer cache:緩存了從磁盤上檢索的數據塊。
2)Redo log buffer:緩存了寫到磁盤以前的重作信息。
3)Shared pool:緩存了各用戶間可共享的各類結構。
4)Large pool:一個可選的區域,用來緩存大的I/O請求,以支持並行查詢、共享服務器模式以及某些備份操做。
5)Java pool:保存java虛擬機中特定會話的數據與java代碼。
6)Streams pool:由Oracle streams使用。
7)Keep buffer cache:保存buffer cache中存儲的數據,使其盡時間可能長。
8)Recycle buffer cache:保存buffer cache中即將過時的數據。
9)nK block size buffer:爲與數據庫默認數據塊大小不一樣的數據塊提供緩存。用來支持表空間傳輸。
database buffer cache, shared pool, large pool, streams pool與Java pool根據當前數據庫狀態,自動調整;
keep buffer cache,recycle buffer cache,nK block size buffer能夠在不關閉實例狀況下,動態修改。數據庫
1)Large Pool大小經過LARGE_POOL_SIZE參數指定:
SQL> alter system set large_pool_size=20m scope=both;
2)做用:
a.爲I/O服務進程分配內存
b.爲備份與恢復操做分配內存
c.爲Oracle共享服務器模式與多個數據庫間的聯機事務分配內存。
經過從large pool中爲共享服務器模式分配會話內存,能夠減小share pool因頻繁爲大對象分配和回收內存而產生的碎片。將大的對象從share pool中分離出來,能夠提升shared pool的使用效率,使其能夠爲新的請求提供服務或者根據須要保留現有的數據。
(四)、Java Pool緩存
一、JAVA_POOL_SIZE
經過JAVA_POOL_SIZE參數指定java pool大小。
保存了jvm中特定會話的java code和數據。
二、在編譯數據庫中的java代碼和使用數據庫中的java資源對象時,都會用到share pool。
java的類加載程序對每一個加載的類會使用大約8K的空間。
系統跟蹤運行過程當中,動態加載的java類,也會使用到share pool。
(五)、Redo Log Buffer
一、服務進程從用戶空間拷貝每條DML/DDL語句的redo條目到redo log buffer中。
二、redo log buffer是一個能夠循環使用的buffer,服務進程拷貝新的redo覆蓋掉redo log buffer中已經過LGWR寫入磁盤(online redo log)的條目。
三、致使LGWR執行寫redo log buffer到online redo log的條件
a.用戶執行事務提交commit
b.每3秒鐘或redo log buffer內已達到1/3滿或包含1MB數據
c.DBWn進程將修改的緩衝區寫入磁盤時(若是相應的重作日誌數據還沒有寫入磁盤)
(六)、ASMM(Automatic Shared Memory Management)
一、SGA_TARGET
1)SGA_TARGET默認值爲0,即ASMM被禁用。須要手動設置SGA各中各組件的大小。
2)當SGA_TARGET爲非0時,則啓用ASMM,自動調整如下各組件大小:
DB buffer cache(default pool)
shared pool
large pool
streams pool
java pool
但ASSM中, 如下參數仍須要手動指定:
log buffer
keep、recycle、以及非標準塊緩衝區
固定SGA以及其餘內部分配。
二、啓用ASMM須要將STATISTICS_LEVEL設置成TYPICAL或ALL
三、啓用ASMM,自動調整SGA內部組件大小後。若手動指定某一組件值,則該值爲該組件的最小值。如
手動設置SGA_TARGET=8G,SHARE_POOL_SIZE=1G,則ASMM在自動調整SGA內部組件大小時,保證share pool不會低於1G。
SQL> SELECT component, current_size/1024/1024 size_mb FROM v$sga_dynamic_components;
四、SGA_MAX_SIZE
SGA_MAX_SIZE指定內存中能夠分配給SGA的最大值。
SGA_TARGET是一個動態參數,其最大值爲SGA_MAX_SIZE指定的值。
服務器
5、PGAoracle
(一)Private SQL Area
一、保存了當前會話的綁定信息以及運行時內存結構。這些信息
二、每一個執行sql語句的會話,都有一個private sql area。
三、當多個用戶執行相同的sql語句,此sql語句保存在一個稱爲shared sql area。此share sql area被指定給這些用戶的private sql area
四、共享服務器模式:private sql area位於SGA的share pool或large pool中
專用服務器模式:private sql area位於PGA中
(二)Cursor、SQL Areas
(三)Work Area
PGA的一大部分被分配給Work Area,用來執行以下操做:
a.基於操做符的排序,group by、order by、rollup和窗口函數。
參數爲sort_area_size
b.hash散列鏈接,
參數爲hash_area_size
c.位圖合併,
參數爲bitmap_merge_area_size
d.位圖建立,
參數爲create_bitmap_area_size
e.批量裝載操做使用的寫緩存
(四)Session memory
保存了會話的變量,如登陸信息及其餘與會話相關的信息,共享服務器模式下,Session memory是共享的。
(五)自動PGA管理
設置PGA_AGGREGATE_TARGET爲非0,則啓用PGA自動管理,並忽略全部*_area_size的設置。如sort_area_size,hash_area_size等。
默認爲啓用PGA的自動管理,Oracle根據SGA的20%來動態調整PGA中專用與Work Area部分的內存大小,最小爲10MB。
用於實例中各活動工做區(work area)的PGA總量,爲PGA_AGGREGATE_TARGET減去其餘組件分配的PGA內存。獲得的結果,按照特定需求動態分配給對應的工做區。
1)設置PGA_AGGREGATE_TARGET大小的步驟
a.設置PGA_AGGREGATE_TARGET爲SGA的20%,對於DSS系統,此值可能太低。
b.運行典型的負載,經過oracle收集的pga統計信息來調整PGA_AGGREGATE_TARGET的值。
c.根據oracle的pga建議調整PGA_AGGREGATE_TARGET大小。
2)禁用自動pga管理
爲向後兼容,設置PGA_AGGREGATE_TARGET爲0,即禁用pga的自動管理。可以使用關聯的*_area_size參數調整對應工做區的最大大小。
bitmap_merge_area_size
create_bitmap_area_size
hash_area_size
sort_area_sizejvm
原文來自:http://blog.itpub.net/25264937/viewspace-694917/ide