Oracle內存占用高過時的調整策略


先貼出具體步驟

開啟自動共享內存管理 ASMM

第一步:將MEMORY_MAX_TERGET和MEMORY_TARGET和設置為0

SQL> alter system set memory_max_target=0 scope=spfile;
System altered.

SQL> alter system set memory_target=0 scope=both;
System altered.

第二步:設置sga_target和pga_aggregate_target的數值

SQL> alter system set sga_target=1024m scope=both;
System altered.

SQL> alter system set pga_aggregate_target=512m scope=both;
System altered.

第三步:重啟數據庫

 

開啟自動內存管理 AMM

 


自動內存管理(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,但是查看參數值時並未生效<span "="">啟動內存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有值就以它為准)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM