oracle三對內存參數間關系之2AMM機制涉及的一對參數間的關系探討 AMM機制涉及的一對參數為: MEMORY_TARGET和MEMORY_MAX_TARGET。 MEMORY_TARGET Default value 0 (SGA autotuning is disabled for DEFERRED mode autotuning requests, but allowed for IMME
AMM機制涉及的一對參數為:MEMORY_TARGET和MEMORY_MAX_TARGET。
Default value | 0 (SGA autotuning is disabled forDEFERRED mode autotuning requests, but allowed forIMMEDIATE mode autotuning requests) |
---|---|
Modifiable | ALTER SYSTEM (即表示該參數為動態參數) |
Range of values | 152 MB to MEMORY_MAX_TARGET |
MEMORY_MAX_TARGET
Default value | 0 |
---|---|
Modifiable | No(即表示該參數為靜態參數) |
Range of values | 0 to the physical memory size available to the Oracle Database |
參見:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams142.htm
上述描述可知,
1、當MEMORY_TARGET=非0時,MEMORY_TARGET要在152 MB to MEMORY_MAX_TARGET
這個范圍內。
2、
由于MEMORY_TARGET始終<=MEMORY_MAX_TARGET,所以
當MEMORY_TARGET=0時,MEMORY_MAX_TARGET
取值范圍為0
to the physical memory size available to the Oracle Database。
當MEMORY_TARGET=非0時,MEMORY_TARGET要在152 MB to MEMORY_MAX_TARGET
這個范圍內,故而MEMORY_MAX_TARGET
取值范圍為152 MB to the physical memory size available to the Oracle Database。
注釋補充:
MEMORY_TARGET 的值要大于等于sga_target與pga_aggregate_target之和。
例如,
當sga_target=744M ,pga_aggregate_target=556M,MEMORY_TARGET=1400M時,
SQL>alter system set memory_target=115m;
alter system set memory_target=115m
*
第 1 行出現錯誤:
ORA-02097: 無法修改參數, 因為指定的值無效
ORA-00838:指定的 MEMORY_TARGET 的值太小, 至少應為 1400M
注釋:
”ORA-00838:指定的 MEMORY_TARGET 的值太小, 至少應為 1400M“這個錯誤提示中1400M,該值等于sga_target與pga_aggregate_target之和,
因為MEMORY_TARGET 》=sga_target與pga_aggregate_target之和。
MEMORY_TARGET和MEMORY_MAX_TARGET兩者關系為
0、MEMORY_TARGET始終<=MEMORY_MAX_TARGET.
例如,MEMORY_MAX_TARGET=116M時,
SQL>alter system set memory_target=120m;
alter system set memory_target=120m
*
第 1 行出現錯誤:
ORA-02097: 無法修改參數, 因為指定的值無效
ORA-00837:指定的值 MEMORY_TARGET 大于 MEMORY_MAX_TARGET
1、當MEMORY_TARGET=非0時(即AMM啟動時)
1.1
當參數文件里MEMORY_TARGET=非0,MEMORY_MAX_TARGET=非0時,實例啟動成功。
1.2
當參數文件里MEMORY_TARGET=非0,MEMORY_MAX_TARGET=0時,實例啟動成功。
實例啟動后,自動會將MEMORY_TARGET的值賦值給MEMORY_MAX_TARGET。即
In a text-based initialization parameter file, if you omitMEMORY_MAX_TARGET
and include a value forMEMORY_TARGET
, then the database automatically setsMEMORY_MAX_TARGET
to the value ofMEMORY_TARGET
.
2、當MEMORY_TARGET=0時(即AMM關閉時)
2.1
當參數文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=非0時,實例啟動成功。
實例啟動后,查看MEMORY_TARGET和MEMORY_MAX_TARGET都為原值(使用showparameters mem或是select * from v$parameter where name like '%mem%';)。即If you omit the line for MEMORY_TARGET
and include a value forMEMORY_MAX_TARGET
, theMEMORY_TARGET
parameter defaults to zero. After startup, you can then dynamically changeMEMORY_TARGET
to a nonzero value, provided that it does not exceed the value ofMEMORY_MAX_TARGET
.(文章詳解)
2.2
當參數文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=0時,實例啟動成功。
實例啟動后,查看MEMORY_TARGET和MEMORY_MAX_TARGET(使用showparameters mem或是select * from v$parameter where name like '%mem%';),發現MEMORY_MAX_TARGET被調整為一個非0值。下面是具體實驗來證明:
參數文件:
*.memory_max_target=0
*.memory_target=0
*.pga_aggregate_target=100M
*.sga_max_size=0
*.sga_target=0
SQL> startuppfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORACLE 例程已經啟動。
Total System Global Area 150667264 bytes
Fixed Size 1373152 bytes
Variable Size 92277792 bytes
Database Buffers 50331648 bytes
Redo Buffers 6684672 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> select name,value from v$parameter where name like '%target%' orname like
'%sga%';
NAME VALUE
--------------------------------- -----------------------------------------------
sga_max_size 150994944(144M)(值變了)
pre_page_sga FALSE
lock_sga FALSE
sga_target 0
memory_target 0
memory_max_target 121634816(116M)(值變了)
archive_lag_target 0
fast_start_io_target 0
fast_start_mttr_target 0
db_flashback_retention_target 1440
pga_aggregate_target 104857600
parallel_servers_target 32
已選擇12行。
SQL> create pfile from memory;
文件已創建。
【
此命令得到的參數文件里:
sga_max_size=144M # internallyadjusted
sga_target=0
】
上述兩條語句的結果可以看出,
sga_max_size 150994944(144M)
sga_max_size=144M # internallyadjusted
memory_max_target 121634816(116M)
參數文件里memory_max_target=0且memory_target=0時啟動實例后memory_max_target會被改為非0值,且memory_max_target是靜態參數,其實例運行期間修改的值在實例運行期間不起作用,所以實例運行期間:memory_max_target始終為非0值,memory_max_target必定大于memory_target(該條在啟動實例時的參數文件里也是如此,oracle會檢查是否滿足此條件的)
sga_max_size=0且sga_target=0時,啟動實例后,oracle會自動sga_max_size值進行調整。
至于memory_max_target,啟動實例后,是oracle會自動進行調整值還是隨意寫一個值不得而知。???
memory_target=0時sga_ target可以為0是因為memory_target=0時sga_ target為0,表示sga為手動管理,即由shared_pool_size參數等之和為sga大小。
附加
MEMORY_MAX_TARGET是靜態參數,所以它即使在實例運行期間修改的值也要在下次啟動時起作用,故而不用試驗MEMORY_MAX_TARGET靜態參數在實例運行期間修改對MEMORY_
ARGET影響。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com