oracle三對內存參數間關系之4 AMM 啟動和關閉兩種情況下 pga_aggregate_target和workarea_size_policy參數間的關系 引言: 在AMM關閉時(即memory_target=0),如果設置workarea_size_policy='AUTO‘,才是啟動了 pga自動管理機制(程序),此時 pga_aggrega
oracle三對內存參數間關系之4AMM啟動和關閉兩種情況下
pga_aggregate_target和workarea_size_policy參數間的關系
引言:
在AMM關閉時(即memory_target=0),如果設置workarea_size_policy='AUTO‘,才是啟動了pga自動管理機制(程序),此時pga_aggregate_target為各個oracle進程的pga之和的最大值(確切地說,各個oracle進程的pga之和圍繞著pga_aggregate_target上下浮動,如何證明這點?說法來源于PGA自動管理原理深入分析及性能調整),
而pga自動管理機制啟動與否不決定于pga_aggregate_target值;
在AMM啟動時(即memory_target=非0),即使設置workarea_size_policy='AUTO‘,也沒有啟動pga自動管理機制(程序),此時pga_aggregate_target為各個oracle進程的pga之和的最小值而已。
也就是說memory_target=非0時即AMM啟動時,無論workarea_size_policy為manual還是auto,pga自動管理機制皆啟動不了。
一、
詳見:
1、AMM啟動下,
pga_aggregate_target和workarea_size_policy各自無論如何修改,都不會影響對方的值.
因為AMM啟動時,pga自動管理機制處于關閉狀態,故而pga_aggregate_target和workarea_size_policy參數間不存在任何關系,是相互獨立的變量.
2、memory_target=非0時即AMM啟動時,pga_aggregate_target
可以設置為0。
二、
2.1實例啟動前的參數文件里
2.1.2當pga_aggregate_target =0,且workarea_size_policy=auto時,實例啟動不成功
下面是具體的實驗:
(參數文件里workarea_size_policy=auto,memory_target=0,memory_max_target=1400M,pga_aggregate_target 為0,還有,sga_max_size=0,sga_target=0)
SQL> startup pfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORA-04032: pga_aggregate_targetmust be set before switching to auto mode
ORA-01078: 處理系統參數失敗
2.1.3當pga_aggregate_target =0,且workarea_size_policy=MANUAL時,實例啟動成功
下面是具體的實驗:
(參數文件里memory_target=0,memory_max_target=1400M,pga_aggregate_target 為0,workarea_size_policy=manual,還有,sga_max_size=0,sga_target=0)
可以啟動實例
SQL> select name,value from v$parameter where name like '%target%' orname like
'%sga%';
NAME VALUE
------------------------ --------------------------------------------------------
sga_max_size 150994944
pre_page_sga FALSE
lock_sga FALSE
sga_target 0
memory_target 0
memory_max_target 1468006400
archive_lag_target 0
fast_start_io_target 0
fast_start_mttr_target 0
db_flashback_retention_target 1440
pga_aggregate_target 0
parallel_servers_target 32
已選擇12行。
注釋:
以參數文件里pga_aggregate_target 為0,workarea_size_policy=manual
啟動實例時,若是以網絡連接方式(sqlplus @ip:服務名)連接到該實例的話,提示ora-12518錯誤,因為pga內存太小設置。
參見:解決ORA-12518的辦法
2.2.1實例運行期間,pga_aggregate_target 不能允許設置為0
實驗:
實例運行期間(參數文件里memory_target=0,memory_max_target=1400M,pga_aggregate_target=100M,workarea_size_policy=manual,還有,sga_max_size=500M,sga_target=0)
SQL>alter system set workarea_size_policy=manual;
系統已更改。
SQL>alter system set pga_aggregate_target=0;
altersystem set pga_aggregate_target=0
*
第 1 行出現錯誤:
ORA-02097:無法修改參數, 因為指定的值無效
ORA-00093:pga_aggregate_target 必須介于 10M 和 4096G-1 之間
SQL>alter system set workarea_size_policy=auto;
系統已更改。
SQL>alter system set pga_aggregate_target=0;
altersystem set pga_aggregate_target=0
*
第 1 行出現錯誤:
ORA-02097:無法修改參數, 因為指定的值無效
ORA-00093:pga_aggregate_target 必須介于 10M 和 4096G-1 之間
上述實驗說明,memory_target=0時即AMM關閉時,實例運行期間,無論workarea_size_policy為manual還是auto,pga_aggregate_target 不能允許設置為0。
workarea_size_policy為 MANUAL時
pga_aggregate_target 可以為0也可以為非0,因為此時pga_aggregate_target (對應的pga自動管理機制) 不起作用。
結合2.2.1和2.1.3、2.1.3,可以得出如下結論:
memory_target=0時即AMM關閉時,無論workarea_size_policy為manual還是auto,pga_aggregate_target 都不能允許設置為0。除了實例以workarea_size_policy=manual啟動實例時可以在參數文件里pga_aggregate_target 可以設置為0,實例啟動后顯示的pga_aggregate_target的值為0。
而由一大點里的結論2可知,memory_target=非0時即AMM啟動時,pga_aggregate_target
可以設置為0。
簡單地說,就是
memory_target=0即手動管理時,在實例運行期間,pga_aggregate_target不能改為0,而memory_target=非0即自動管理時,在實例運行期間,pga_aggregate_target可以改為0。
【參數A不變時,參數B改變值可否 的例子】
參數文件:
*.memory_max_target=700M
*.memory_target=0
*.pga_aggregate_target=0
*.sga_max_size=500M
*.sga_target=500M
*.workarea_size_policy='MANUAL'
Microsoft Windows [版本 6.1.7600]
C:\Windows\System32>set oracle_sid=monkey
C:\Windows\System32>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 12月 5 09:26:532014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已連接到空閑例程。
SQL> startuppfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORACLE 例程已經啟動。
Total System Global Area 523108352 bytes
Fixed Size 1375704 bytes
Variable Size 159384104 bytes
Database Buffers 356515840 bytes
Redo Buffers 5832704 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameters pga
NAME TYPE VALUE
----------------------------------------------- ------------------------------
pga_aggregate_target big integer 0
SQL> show parameters policy
NAME TYPE VALUE
----------------------------------------------- ------------------------------
parallel_degree_policy string MANUAL
workarea_size_policy string MANUAL
SQL> alter system set workarea_size_policy=auto;
alter system set workarea_size_policy=auto
*
第 1 行出現錯誤:
ORA-02097: 無法修改參數, 因為指定的值無效
ORA-04032: pga_aggregate_target必須在切換到自動模式之前進行設置
之所以出現ORA-04032提示,是因為當workarea_size_policy=auto即自動模式時,參數workarea_size_policy是不允許pga_aggregate_target為0,所以當pga_aggregate_target為0,workarea_size_policy=MANUAL 時想要將workarea_size_policy修改為 auto,則必須先將pga_aggregate_target修改為非0。
結合2.2.2和2.1.2,可以得出結論:
當workarea_size_policy=auto即自動模式時,參數workarea_size_policy是不允許(workarea_size_policy=auto的同時,)pga_aggregate_target為0。
2.2.3 pga_aggregate_target從0改到非0時, workarea_size_policy會從MANUAL變為auto.
(Setting PGA_AGGREGATE_TARGET
to a nonzero value has the effect of automatically setting theWORKAREA_SIZE_POLICY
parameter toAUTO
.)
【參數A改變值,參數B是否會跟著變 的例子】
參數文件:
*.memory_max_target=700M
*.memory_target=0
*.pga_aggregate_target=0
*.workarea_size_policy='MANUAL'
*.sga_max_size=500M
*.sga_target=500M
SQL> startup pfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORACLE 例程已經啟動。
Total SystemGlobal Area 523108352 bytes
Fixed Size 1375704 bytes
Variable Size 159384104 bytes
Database Buffers 356515840 bytes
Redo Buffers 5832704 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameters policy
NAME TYPE VALUE
----------------------------------------------- ------------------------------
parallel_degree_policy string MANUAL
workarea_size_policy string MANUAL
SQL> show parameters pga
NAME TYPE VALUE
----------------------------------------------- ------------------------------
pga_aggregate_target big integer 0
SQL> show parameters mem
NAME TYPE VALUE
----------------------------------------------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 700M
memory_target big integer 0
shared_memory_address integer 0
SQL> alter system set pga_aggregate_target=100m;
系統已更改。
SQL> showparameters policy
NAME TYPE VALUE
----------------------------------------------- ------------------------------
parallel_degree_policy string MANUAL
workarea_size_policy string AUTO
SQL>
由于memory_target=0時即AMM關閉時,實例運行期間,無論workarea_size_policy為manual還是auto,pga_aggregate_target
都不能允許設置為0,所以說oracle官方文檔里說的關于“Setting PGA_AGGREGATE_TARGET
to 0 automatically sets theWORKAREA_SIZE_POLICY
parameter toMANUAL
”這種情況就是錯誤的,不可實現的。
參見:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams193.htm#CHDBJCDE
附加:
Property | Description |
---|---|
Parameter type | Big integer |
Syntax | PGA_AGGREGATE_TARGET =
integer [K | M | G] |
Default value | 10 MB or 20% of the size of the SGA, whichever is greater |
Modifiable | ALTER SYSTEM |
Range of values | Minimum: 10 MB
Maximum: 4096 GB - 1 |
Basic | Yes |
PGA_AGGREGATE_TARGET
specifies the target aggregate PGA memory available to all server processes attached to the instance.
Setting PGA_AGGREGATE_TARGET
to a nonzero value has the effect of automatically setting the
WORKAREA_SIZE_POLICY
parameter to AUTO
. This means that SQL working areas used by memory-intensive SQL operators (such as sort, group-by, hash-join, bitmap merge, and bitmap create) will be automatically sized. A nonzero value for
this parameter is the default since, unless you specify otherwise, Oracle sets it to 20% of the SGA or 10 MB, whichever is greater.
Setting PGA_AGGREGATE_TARGET
to 0 automatically sets the WORKAREA_SIZE_POLICY
parameter to
MANUAL
. This means that SQL workareas are sized using the *_AREA_SIZE
parameters.
Oracle attempts to keep the amount of private memory below the target specified by this parameter by adapting the size of the work areas to private memory. When increasing the value of this parameter, you indirectly increase the memory allotted to work areas. Consequently, more memory-intensive operations are able to run fully in memory and less will work their way over to disk.
If Automatic Memory Management is enabled (MEMORY_TARGET
is set to a positive value) and
PGA_AGGREGATE_TARGET
is also set to a positive value, the PGA_AGGREGATE_TARGET
value acts as the minimum value for the size of the instance PGA.
Property | Description |
---|---|
Parameter type | String |
Syntax | WORKAREA_SIZE_POLICY = { AUTO | MANUAL } |
Default value | AUTO |
Modifiable | ALTER SESSION ,
ALTER SYSTEM |
WORKAREA_SIZE_POLICY
specifies the policy for sizing work areas. This parameter controls the mode in which working areas are tuned.
Values:
AUTO
Work areas used by memory-intensive operators are sized automatically, based on the PGA memory used by the system, the target PGA memory set in
PGA_AGGREGATE_TARGET
, and the requirement of each individual operator.
MANUAL
The sizing of work areas is manual and based on the values of the *_AREA_SIZE
parameter corresponding to the operation (for example, a sort uses
SORT_AREA_SIZE
). Specifying MANUAL
may result in sub-optimal performance and poor PGA memory utilization.
===========================================================
實例運行時參數間關系的兩種模式:
參數A不變時,參數B改變值可否
參數A改變值,參數B是否會跟著變。
pga_aggregate_target 為0
實例運行期間當pga_aggregate_target=0時將workarea_size_policy從manual修改為auto是修改不了的(在memory_target=0即AMM關閉的情況下)
pga_aggregate_target從0改到非0時, workarea_size_policy會從MANUAL變為auto.
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com