Oracle 的ASMM && AMM

Oracle 的内存管理机制:

ORACLE 9i及之前 : PGA自动管理,SGA手动管理 

ORACLE 10g : PGA自动管理,SGA自动管理(ASMM,自动共享内存管理)

ORACLE 11g : PGA,SGA统一自动管理(AMM,自动内存管理)

ORACLE 12c : 跟11g一样,没有变化 ## ASMM && AMM 的区别:

  ASMM (Automatic Shared Memory Management): 设置一个SGA的目标值以及SGA的最大值,数据库来动态调整其中的各个组件,如Database buffer cache、Shared pool等等通过使用ASMM,就不需要手工设置相关内存组件的大小,而只为SGA设置一个总的大小,Oracle的MMAN进程(Memory Manager Process,内存管理进程)会随着时间推移,根据系统负载的变化和内存需要,自动调整SGA中各个组件的内存大小。

  AMM (Automatic Memory Management): 让数据库完全管理SGA、PGA的大小,而对于管理员只需要设置一个总的大小(memory_target),数据库会动态的调整SGA、PGA的大小以及其中包含的各个组件大小,如Database buffer cache、Shared pool等等。 ## 进行操作设置: [Oracle 的ASMM && AMM](https://www.cnblogs.com/Leo-Cjh/p/13471083.html)

设置AMM

注:参数LOCK_SGA=TRUE  则AMM是不可用的 

  • MEMORY_TARGET  != 0
  • SGA_TARGET=0  (或最小值)
  • PGA_AGGREGATE_TARGET=0  (或最小值)

 

1.Memory_TARGET约等于数据库消耗的SGA和PGA内存总和
2.查找当前SGA值
    show parameter sga_target
3.查找当前PGA值   
    SELECT VALUE/1024/1024/1024 FROM V$PGASTAT WHERE name='maximum PGA allocated';
4.将两值相加得到MEMORY_TARGET参数  例如(1200MB/)
5. 用如下命令修改
   alter system set MEMORY_MAX_TARGET=8G SCOPE=SPFILE;
   alter system set MEMORY_TARGET=4G SCOPE=SPFILE;
   alter system set SGA_TARGET=0 SCOPE=SPFILE;
   alter system set PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;

SGA_TARGET, PGA_AGGREGATE_TARGET 参数值为零,可以使数据库自动调整SGA和PGA值

补充: 可使用 select * from v$memory_target_advice order by memory_size; 根据建议设置memory_target值。
 

设置ASMM

  • SGA_TARGET  != 0    
  • PGA_AGGREGATE_TARGET !=0
  • MEMORY_TARGET = 0

设置MEMORY_TARGET参数为0,ALTER SYSTEM SET MEMORY_TARGET = 0;
记下来设置SGA_TARGET的值,也可以设置各个组件的最小值。

ALTER SYSTEM SET SGA_TARGET = 992M;
ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
ALTER SYSTEM SET DB_CACHE_SIZE = 0;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;

SGA中的各个组件值可以自定义,自定义为该组件的最小值,然后数据库根据运转情况进行调整相应的值。

设置手动管理

 

 
 
posted @ 2020-08-10 17:38  Lannister-leo  阅读(740)  评论(0编辑  收藏  举报