oracle三对内存参数间关系之2AMM机制涉及的一对参数间的关系探讨
2014-12-09 10:49
288 查看
oracle三对内存参数间关系之2AMM机制涉及的一对参数间的关系探讨
AMM机制涉及的一对参数为:MEMORY_TARGET和MEMORY_MAX_TARGET。MEMORY_TARGET
Default value | 0(SGA autotuning is disabled for DEFERREDmode autotuning requests, but allowed for IMMEDIATEmode 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 | 0to the physical memory size available to the Oracle Database |
上述描述可知,
1、当MEMORY_TARGET=非0时,MEMORY_TARGET要在152 MB to
MEMORY_MAX_TARGET这个范围内。
2、
由于MEMORY_TARGET始终<=MEMORY_MAX_TARGET,所以
当MEMORY_TARGET=0时,
MEMORY_MAX_TARGET取值范围为
0to 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.
例如[b],MEMORY_MAX_TARGET=116M时,[/b]
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 omit
MEMORY_MAX_TARGETand include a value for
MEMORY_TARGET, then the database automatically sets
MEMORY_MAX_TARGETto the value of
MEMORY_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_TARGETand include a value for
MEMORY_MAX_TARGET, the
MEMORY_TARGETparameter defaults to zero. After startup, you can then dynamically change
MEMORY_TARGET
to a nonzero value, provided that it does not exceed the value of
MEMORY_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)[b](值变了)[/b]
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影响。
相关文章推荐
- oracle三对内存参数间关系之3AMM启动和关闭两种情况下ASMM机制涉及的一对参数间的关系探讨
- oracle三对内存参数间关系之5AMM启动和关闭两种情况下pga自动管理涉及的一对参数间的关系探讨
- oracle三对内存参数间关系之4sga_参数和memory_参数这两类上下级层次参数间的关系
- oracle三对内存参数间关系之6pga_aggrate_target参数和memory_参数这两类上下级层次参数间的关系
- 关于C语言中函数调用和参数传递机制的探讨
- oracle内存调优参数详解
- Oracle安装-Linux内核参数-共享内存信号量设置
- NHibernate初探(七) 一对多关系延迟机制
- Oracle 空闲列表管理机制与pctfree和pctused参数
- Oracle sessions,processes 和 transactions 参数 关系 说明
- Oracle基础知识--内存参数设置
- 关于C语言中函数调用和参数传递机制的探讨
- oracle启动数据库和参数文件的关系
- Oracle sessions,processes 和 transactions 参数 关系 说明
- Oracle sessions,processes 和 transactions 参数 关系 说明
- 转载-关于C语言中函数调用和参数传递机制的探讨
- Oracle 空闲列表管理机制与pctfree和pctused参数
- Oracle Shared Pool内部机制探讨
- 空闲内存税的算法(VMware内存机制探讨之补充)
- Oracle sessions,processes 和 transactions 参数 关系 说明