所谓ASMM,也就是SGA的自动管理。
1.作用
不需要手工的设置shared pool和data buffer cache的大小,只需要设置一个总大小。oracle就会根据负载的变化,自动调整个组件的大小。
2.使用
启用ASMM的初始化参数,SGA_TARGET.该参数定义了SGA的总容量。同时初始化参数statistics_level必须设置为typical或all才能启动ASMM,
否则设置为basic,则是关闭ASMM
ASMM只能自动调整五个内存池的大小。
buffer cache,shared pool,java pool,large pool,steam pool
而redo log buffer,keep buffer cache等仍然需要手工调整
另一个初始化参数SGA_MAX_SIZE.
SGA_TARGET不能超过SGA_MAX_SIZE的值,修改sga_max_size时,必须重启实例才能生效。
而sga_target则可以在线修改,立即生效,无需重启实例
3.ASMM的原理
oracle通过引入一个MMAN的后台进程来实现ASMM,
每隔一段时间,MMAN就会启动,去询问oracle提供的各个内存组建顾问,比如buffer cache顾问,shared pool顾问,
由这些顾问将当前的负载情况,将这五个可以自动调整的内存池的,建议的大小返回给MMAN。然后MMAN根据返回的值
来设置各个内存值。
同时如果如果实例使用spfil,还会将这些建议值写入spfile,这样下次启动,实例将会将些建议值作为启动的依据。
当启用ASMM,又同时设置了各个内存池的大小时候,比如说设置了参数shared_pool_size,时候。oracler将会以设置的值作为最小值。
4.oracle11g asmm
ORACLE11G使用自动内存管理不再需要SGA_TARGET和pga_target,因为这两个参数都是自动调优的,除非像设置SGA和PGA的最小值才需要设置这辆个参数。
oracle11g数据库通过设置memory_target的初始化参数来实现内存自动管理。这个参数是整个oracle实例所能使用的的内存总大小,包括SGA和PGA.
在meory_target的大小之内,pga和sga可以根据负载情况自动调整。
同样也存在memory_max_size的参数设置,当meory_target的内存不够时,可以动态调节memory_target的值,但其大小不能超过meory_max_size