学习一个知识点时,最好先了解其历史。ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Management(ASMM)实现SGA的自动管理,到11g通过Automatic Memory Management(AMM)实现内存(SGA+PGA)的自动管理。目前的11G版本,DBA只需要设置2个或者一个参数,就可以实现ORACLE对内存的自动管理。
Oracle的内存管理方式
Oracle 11g 引入参数mymory_max_target 和memory_target 就是oracle的新特性自动内存管理,AMM 的引入,组合出来有 5 种内存管理形式。
- 自动内存管理(AMM): memory_target=非0,是自动内存管理,如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。
- 自动共享内存管理(ASMM): 在memory_target=0 and sga_target=非0 是自动内存管理
- 手工共享内存管理: memory_target=0 and sga_target=0 指定 share_pool_size 、db_cache_size 等 sga 参数
- 自动 PGA 管理: memory_target=0 and workarea_size_policy=auto and PGA_AGGREGATE_TARGET=值
- 手动 PGA 管理: memory_target=0 and workarea_size_policy=manal 然后指定 SORT_AREA_SIZE 等 PGA 参数,一般不使用手动管理PGA
ASMM管理方式
1.1 ASMM的管理对象为SGA(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool). 注:不包含缓冲池(Keep buffer pool;Recycle buffer pool;nK buffer pool) 1.2 设置ASMM的管理 i)从手动共享内存管理模式下启用ASMM i1) 获取SGA_TARGET的值: SELECT ((SELECT SUM(value) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)) "SGA_TARGET" FROM DUAL; i2) 使用该值设置SGA_TARGET。 i3) 将(SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE,DB_CACHE_SIZE,STREAMS_POOL_SIZE)值设置为0。 ii)从自动内存管理模式(AMM)切换到ASMM ii1)将初始化参数MEMORY_TARGET 设置为0。 ALTER SYSTEM SET MEMORY_TARGET = 0; 数据库将根据当前的SGA 内存分配设置SGA_TARGET。 ii2)将自动设置大小的SGA组件(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool)的值设置为0。 完成后,重新启动实例
AMM管理方式:
1.1 AMM的管理对象为SGA(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool)+PGA。注:此时sga_target为0无意义 1.2 设置AMM的管理 1.用sqlplus以sysdba链接数据库 2.计算MEMORY_TARGET的最小值 a.确定当前的 SGA_TARGET 和 PGA_AGGREGATE_TARGET SQL> show parameter target NAME TYPE VALUE ------------------------------------ ----------- ---------------- archive_lag_target integer 0 db_flashback_retention_target integer 1440 fast_start_io_target integer 0 fast_start_mttr_target integer 0 memory_max_target big integer 0 memory_target big integer 0 parallel_servers_target integer 16 pga_aggregate_target big integer 90M sga_target big integer 272M b.查询从数据库启动以来最大的PGA select value from v$pgastat where name='maximum PGA allocated'; c.计算MEMORY_TARGET memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated) 例如:SGA_TARGET = 272M ; PGA_AGGREGATE_TARGET = 90M , 且 maximum PGA allocated 为 120M, 那么 MEMORY_TARGET >= 392M (272M + 120M). 3.参照2c,修改memory_target的值 ALTER SYSTEM SET MEMORY_TARGET=392M; 1.3 MEMORY_TARGET,SGA_TARGET和PGA_AGGREGATE_TARGET之间的关系 如果将SGA_TARGET和PGA_AGGREGATE_TARGET设置为非零值,则可将其分别视为SGA和PGA大小的下限值。 MEMORY_TARGET 可以采用从SGA_TARGET+PGA_AGGREGATE_TARGET到MEMORY_MAX_SIZE的值
浙公网安备 33010602011771号