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 (或最小值)
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中的各个组件值可以自定义,自定义为该组件的最小值,然后数据库根据运转情况进行调整相应的值。