【例項】之memory_target、sga_target,pga_aggregate_target關係

不一樣的天空w發表於2016-10-18

自動記憶體管理(Automatic Memory Management)是11G中推出的新功能,10G中只有自動SGA管理。啟用了AMM只需設定記憶體的大小,就可以自動的在SGA和PGA之間分配記憶體,省去了管理設定SGA和PGA的麻煩。

AMM的相關引數:
MEMORY_TARGET:SGA和PGA可以使用的記憶體的總的大小,可以動態的設定,最大值不超過MEMORY_MAX_TARGET。
MEMORY_MAX_TARGET:可以使用的記憶體的最大值,這個是靜態引數,要修改必須重啟資料庫。
SGA_TARGET:SGA目標記憶體大小,啟用AMM後,這個引數應該設為0.
PGA_AGGREGATE_TARGET:PGA目標記憶體大小,啟用AMM後,應該設為0.

開啟AMM:
要想開啟AMM,只需要設定MEMORY_TARGET,同時設定SGA_TARGET和PGA_AGGREGATE_TARGET都為0。如果沒有設定MEMORY_MAX_TARGET,在啟動後MEMORY_MAX_TARGET自動設定為MEMORY_TARGET大小。這樣就可以自動的在SGA和PGA之間分配記憶體。
可以動態的修改MEMORY_TARGET大小,只要MEMORY_TARGET<=MEMORY_MAX_TARGET即可。

MEMORY_TARGET--作業系統的角度上 Oracle 所能使用的最大記憶體值。動態引數
MEMORY_MAX_TARGET--MEMORY_TARGET所能設定的最大值。非動態可調。

注意:
如果使用的是 pfile,設定了 MEMORY_TARGET 而沒有指定 MEMORY_MAX_TARGET 的值,則例項啟動後 MEMORY_MAX_TARGET 的值與 MEMORY_TARGET 相等。如果 pfile 中指定了 MEMORY_MAX_TARGET 而沒有指定 MEMORY_TARGET ,例項啟動後 MEMORY_TARGET 為 0 。

例外的情況:
1.設定了MEMORY_TARGET,又設定了SGA_TARGET和PGA_AGGREGATE_TARGET
此時SGA_TARGET+ PGA_AGGREGATE_TARGET要<=MEMORY_TARGET。
SGA_TARGET和PGA_AGGREGATE_TARGET分別為SGA的PGA大小的下限。
MEMORY_TARGET=1G,SGA_TARGET=500M,PGA_AGGREGATE_TARGET=300M,則SGA下限為500M,PGA下限為300M,以此為根據在SGA和PGA之間分配記憶體。

2.如果沒設定MEMORY_TARGET,設定了SGA_TARGET和PGA_AGGREGATE_TARGET
這時開啟了自動共享記憶體管理(SGA自動管理),SGA內各個元件之間自動的分配記憶體

3.如果啥都沒有設定,也是可以啟動的,按照預設的情況,把記憶體的40%分給ORACLE,然後把60%分給SGA,把40%分給PGA。

一:自動記憶體管理(AMM)
預設安裝的例項即是 AMM 方式。如下

SQL> show parameters target
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
archive_lag_target                   integer                0
db_flashback_retention_target        integer                1440
fast_start_io_target                 integer                0
fast_start_mttr_target               integer                0
memory_max_target                    big integer            1216M
memory_target                        big integer            1216M
pga_aggregate_target                 big integer            0
sga_target                           big integer            0

要注意到 SGA_TARGET 和 都為 0 。


二:自動共享記憶體管理(Automatic Shared Memory Management, ASMM)
這是 10g 引入的管理方式,要使用這種方式,需要設定初始化引數 MEMORY_TARGET=0 ,然後顯式的指定 SGA_TARGET 的值。

SQL> alter system set sga_target=1024m scope=both;
alter system set sga_target=1024m scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00839: SGA_TARGET cannot be modified to the specified value
SQL> alter system set memory_target=0 scope=both;
System altered.
SQL> alter system set sga_target=1024m scope=both;
System altered.
SQL>

這兩個引數的修改是有嚴格順序的,如果不遵守倒也沒問題--Oracle 會報告錯誤。


三:手工共享記憶體管理


這個又更加原始了一些。因為原始,所以新的初始化引數 SGA_TARGET 與 MEMORY_TARGET 都要設定為 0. 然後手工設定 share_pool_size 、db_cache_size 等 sga 引數。要注意 RESULT_CACHE_SIZE 引數是 11g 新引入的,用來快取 SQL 結果。

四.自動 PGA 記憶體管理

如果使用 AMM,則對 PGA 不用操心。如果要做到精細控制而切換到自動 PGA 記憶體管理模式,需要設定WORKAREA_SIZE_POLICY = AUTO(預設即為 AUTO),然後需要指定 PGA_AGGREGATE_TARGET 的值。如需要精確控制PGA,則 WORKAREA_SIZE_POLICY = MANUAL


五.手動 PGA 管理

前提是 WORKAREA_SIZE_POLICY = manual ,然後分別指定 SORT_AREA_SIZE 等 PGA 相關的引數。估計現在沒有人幹這個吃力不討好的事情了。這個模式大可以忽略。

六.AMM 的限制

如果初始化引數 LOCK_SGA = true(預設false) ,則 AMM 是不可用的。




下面來看看在11g 中Memory_target 設定和不設定對SGA/PGA 的影響:
如果Memory_target 設定為非0 值
1、sga_target 和 pga_aggregate_target 已經設定大小
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一致

2、sga_target 設定大小, pga_aggregate_target 沒有設定大小
pga_aggregate_target初始化值=memory_target-sga_target

3、sga_target 沒有設定大小, pga_aggregate_target 設定大小 
sga_target 初始化值=memory_target-pga_aggregate_target

4、sga_target 和 pga_aggregate_target 都沒有設定大小
兩個值沒有最小值和預設值,Oracle 將根據資料庫執行狀況進行分配大小,但在資料庫啟動是會有一個固定比例來分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%

如果Memory_target 設定為0
11g 中預設為0 則初始狀態下取消了Memory_target 的作用,完全和10g 在記憶體管理上一致,完全向下相容。

1、SGA_TARGET設定值
自動調節SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool等記憶體空間的大小。PGA 則依賴pga_aggregate_target 的大小。

2、SGA_target 和PGA_AGGREGATE_TARGET 都沒有設定
SGA 中的各元件大小都要明確設定,不能自動調整各元件大小。PGA不能自動增長和收縮

3: MEMORY_MAX_TARGET 設定而MEMORY_TARGET =0  這種情況先和10g 一樣。

實驗:關閉記憶體自動管理,設定SGA,PGA分別自動管理,SGA=500,PGA=200


[root@hong ~]# su - oracle

[oracle@hong ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Thu Sep 15 02:39:35 2016

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

Connected to an idle instance.

 

SQL> startup

ORACLE instance started.

 

Total System Global Area  939495424 bytes

Fixed Size                  2258840 bytes

Variable Size             595593320 bytes

Database Buffers          335544320 bytes

Redo Buffers                6098944 bytes

Database mounted.

Database opened.

SQL> show parameter sga_target

 

NAME                                 TYPE        VALUE

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

sga_target                           big integer 0


SQL> show parameter pga

 

NAME                                 TYPE        VALUE

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

pga_aggregate_target                 big integer 0

 

SQL> alter system set sga_target=500M scope=spfile;

 

System altered.

 

SQL> alter system set pga_aggregate_target=200M scope=spfile;

 

System altered.

 

SQL> alter system set memory_target=0 scope=spfile;

 

System altered.

SQL> show parameter target

 

NAME                                 TYPE        VALUE

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

archive_lag_target                   integer     0

db_flashback_retention_target        integer     1440

fast_start_io_target                 integer     0

fast_start_mttr_target               integer     0

memory_max_target                    big integer 0

memory_target                        big integer 0

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 200M

sga_target                           big integer 500M

((((((上述三個引數sga_targetpga_aggregate_targetmemory_target,相互影響他們的引數值,所以更改此類引數需加scope=spfile,不加預設scope=both,但是檢視引數值時並未生效啟動記憶體SGA,PGA分別自動管理,順序為:alter system set sga_target=500m scope=spfile;alter system set pga_aggregate_target=200m scope=spfile; alter system set memory_target=0 scope=spfile;)))))

 
——重置記憶體自動管理memory_target

SQL> alter system set memory_target=900M scope=spfile;

 

System altered.

 

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  939495424 bytes

Fixed Size                  2258840 bytes

Variable Size             671090792 bytes

Database Buffers          260046848 bytes

Redo Buffers                6098944 bytes

Database mounted.

Database opened.

SQL> show parameter target

 

NAME                                 TYPE        VALUE

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

archive_lag_target                   integer     0

db_flashback_retention_target        integer     1440

fast_start_io_target                 integer     0

fast_start_mttr_target               integer     0

memory_max_target                    big integer 900M

memory_target                        big integer 900M

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 200M

sga_target                           big integer 500M

 

SQL> alter system set pga_aggregate_target=175M;

 

System altered.

 

SQL> alter system set sga_target=300M;

 

System altered.

 

SQL> show parameter target

 

NAME                                 TYPE        VALUE

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

archive_lag_target                   integer     0

db_flashback_retention_target        integer     1440

fast_start_io_target                 integer     0

fast_start_mttr_target               integer     0

memory_max_target                    big integer 900M

memory_target                        big integer 900M

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 175M

sga_target                           big integer 300M

SQL>

(記憶體自動管理生效,只要memory_target有值就以它為準)

 
參考網上資料,特此感謝!

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

相關文章