記憶體_管理總結

lusklusklusk發表於2016-05-24

linux下,以下兩個命令都可以檢視記憶體資訊,結果類似,但是在oracle中還是看下者為好,因為有PageTables、HugePages_Total等資訊
free -m
cat /proc/meminfo


MEMORY_MAX_TARGET
specifies the maximum value to which a DBA can set the MEMORY_TARGET initialization parameter

MEMORY_TARGET specifies the Oracle system-wide usable memory. The database tunes memory to the MEMORY_TARGET value, reducing or enlarging the SGA and PGA as needed.

 

memory_max_target的值必須大於MEMORY_TARGET,否則會報錯ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET

 

ORACLE 資料庫從11g 版本開始,引入了一個自動記憶體管理(Automatic Memory Management) AMM特性,該特性需要更多的共享記憶體(/dev/shm),因此如果決定應用該特性的話, 必須要確保/dev/shm大於MEMORY_MAX_TARGET MEMORY_TARGETMEMORY_MAX_TARGET 如果超過/dev/shm的大小,安裝會報錯ORA-00845透過AMM這個功能DBA只需要設定memory_target一個引數就可以完成整個資料庫例項記憶體的配置,在11.2.0.2版本之前,DBCA建庫預設就是AMM管理。同樣如果你設定AMM後,也設定了SGA_TARGETpga_aggregate_target等引數,那麼這些引數會作為最小值要求。AMM最大的問題是不能使用大頁記憶體。memery_target不等於0,就開啟了AMM

 

可以vi /etc/fstab修改/dev/shm這個共享記憶體檔案系統的大小:

tmpfs   /dev/shm   tmpfs   defaults,size=XXG   0 0

 

 

針對於Oracle的記憶體分配方式,推薦在核心繫統上:配置PGA_AGGREGATE_TARGETSGA_TARGET,併為buffer cacheshared poolSORT_AREA_SIZE設定最小值的方式。AMM這種記憶體分配方式,由於不能使用大頁,建議不要去用。

 

如果記憶體足夠,想偷懶則配置MEMORY_TARGET,併為PGA_AGGREGATE_TARGETSGA_TARGET設定最小值

 

 

SGAPGAUGA都是Oracle管理的記憶體區。

  SGASystem Global Area),即系統全域性區,Oracle中最重要的記憶體區。

  PGAProcess Global Area),即程式全域性區,一個程式的專用的記憶體區。

  UGAUser Global Area),即使用者全域性區,與特定的會話相關聯。

  專用伺服器連線模式,UGAPGA中分配。

  共享伺服器連線模式,UGASGA中的Large Pool中分配。

 

 

 

show parameter memory,一個memery_targetmemory_max_target

AMMmemery_target不等於0,就開啟了AMM

memery_target=sga+pga

memery_target一般不超過作業系統實體記憶體的80%

如果memery_target設定為1Gsga設定為600Mpga設定為300M,則sga的範圍是600--700M1G-300M),pga範圍是300--4001G-600M

如果memery_target設定為0,則必須手動設定sgapga的大小,否則sgapga都將是0

聯機事務中,sgamemery_target70%-80%,pgamemery_target20%-30%

非聯機事務,sgamemery_target50%-60%,pgamemery_target40%-50%

 

 

oracle11g設定了memory_target引數後,會自動設定sgapga引數,已經實驗驗證

一開始memory_target1500Mshow parameter sga,看到sga800M

修改memory_target2500Mshow parameter sga,看到sga1500M

但是最好設定一下sga_targetpga_target的值,因為有sga_max時,sga_target就是下限值了

 

 

 

 

SGA

show parameter sga,一個sgq_targetsga_max_size

同理,sga_target=SHARED_POOL_SIZE+DB_CACHE_SIZE+LARGE_POOL_SIZE+JAVA_POOL_SIZE

如果sga_target設定為0,則必須手動設定shared poolbuffer等大小,否則shared poolbuffer等都將是0

ASMMsga_target不等於0,就開啟了ASMM

如果memery_target=1G,開啟了AMM的同時,設定sga_target等於0pga=500M,則sga的值範圍是(0-500M)

 

 

PGA

PGA_AGGREGATE_TARGET-此引數用來指定所有session總計可以使用最大PGA記憶體。這個引數可以被動態的更改。

SORT_AREA_SIZE,一個會話排序時能夠使用的最大記憶體值,當PGA自動管理時所有會話的工作區大小的調整都是自動的,在該模式下執行的所有會話都會忽略SORT_AREA_SIZE引數的值,但是會把該值當成最小值,預設最大隻能用到1G

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2105905/,如需轉載,請註明出處,否則將追究法律責任。

相關文章