oracle对于内存的管理有两种方式:手动分配各个内存结构、自动共享内存管理

手动分配内存管理在后期的管理中会带来不变;oracle提供了ASMM,会管理大大提高了效率。

原理:oracle引入了MMAN(Memory Mnanager)这个概念,这是一个后台进程,会每隔一段时间就会自动运行,运行之后会询问oracle提供的各个内存组件adviser,adviser会将可以自动调整的内存池的建议的大小返回给MMAN,然后MMAN会根据返回的结果设置各个大小

ASMM自动优化的组件:shared pool,DB cache,large pool,java pool,streams pool

ASMM的好处 :

会根据系统的负载自动调整各个组件的大小

增大SGA的使用效率

减少内存溢出的错误

易于管理维护

 

管理员只需要设置一个SGA_TARGET的总大小,具体各个组件的大小不需要手动设置具体的大小。

设置自动调整SGA,首先看看初始化参数是不是自动调整的,可以看SGA_TARGET参数,如果这个参数没有设置或者值为0时,SGA自动调整是失效的

SQL> show parameter sga_target
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
sga_target                           big integer
272M

 

初始化参数STATISTICS_LEVEL 参数值必须是TYPICAL 或者ALL时才能启动ASMM,

SQL> show parameter statistic
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
statistics_level                     string
TYPICAL
timed_os_statistics                  integer
0
timed_statistics                     boolean
TRUE

 

取消ASMM

使ASMM失效的方法也很简单,手动设置SGA_TARGET 的值为0将会是自动调整失效,SGA的大小不会改变,自动调整的内存大小将会是当前设置大小。

 

相关动态视图:

v$parameter 

v$sgastat

v$sga_dynamic_components

v$db_cache_advice

v$shared_pool_advice

v$large_pool_advice

v$streams_pool_advice

v$java_pool_advice

v$sga_target_advice

v$pga_target_advice

对于所有指导必须先讲STATISTICS_LEVEL 参数值设为typical