关于oracle11G的自动内存管理MEMORY_TARGET和MEMORY_MAX_TARGET

自动内存管理是用两个初始化参数进行配置的:
  MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。
  MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。
  使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0
      memory_max_target是一个非动态参数,不能在memory范围动态改变,只能通过指明 scope=spfile这个条件来达到数据库在下次启动后让改变生效的目的。
      但是memory_target这个参数是可以动态调节的...也就是说不需要重新启动DB,就可以让其生效。
MEMORY_MAX_TARGET 是设定Oracle能占OS多大的内存空间
     SGA_MAX_SIZE是Oracle SGA 区最大能占多大内存空间
     10g 的sga_max_size 是动态分配 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,是根据Oracle 运行状况来重新分配SGA 各内存块的大小。PGA在10g中需要单独设定。
     11g MEMORY_MAX_TARGET 参数包含SGA和PGA两部分。
    在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。
    在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算:           MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated");
下面的查询语句向你展示有关的信息,以及如何计算出需要的值:
1.SELECT name, value
FROM   v$parameter
WHERE  name IN (‘pga_aggregate_target‘, ‘sga_target‘)
UNION
SELECT ‘maximum PGA allocated‘ AS name, TO_CHAR(value) AS value
FROM   v$pgastat
WHERE  name = ‘maximum PGA allocated‘;
2.SELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_target
FROM (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = ‘sga_target‘) sga,
     (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = ‘pga_aggregate_target‘) pga,
     (SELECT value FROM v$pgastat WHERE name = ‘maximum PGA allocated‘) max_pga;
    除现有的用于内存管理的V$视图外,Oracle 11g还新增加了下面4个视图用于自动内存管理:
    V$MEMORY_CURRENT_RESIZE_OPS
    V$MEMORY_DYNAMIC_COMPONENTS
    V$MEMORY_RESIZE_OPS
    V$MEMORY_TARGET_ADVICE
    为每个动态组件分配的内存大小使用视图V$MEMORY_DYNAMIC_COMPONENTS显示:
SELECT  component, current_size, min_size, max_size
FROM    v$memory_dynamic_components
WHERE   current_size != 0;
    V$MEMORY_CURRENT_RESIZE_OPS和V$MEMORY_RESIZE_OPS分别显示了组件当前改变大小操作的信息和上一次改变大小操作的信息。
    V$MEMORY_TARGET_ADVICE提供了帮助调整MEMORY_TARGET参数的信息,它显示了一段MEMORY_TARGET设置可用的范围,根据当前的设置,估算完成当前负载所需要的DB Time值。
    SELECT * FROM v$memory_target_advice ORDER BY memory_size;

下面来看看在11g 中Memory_target 设置和不设置对SGA/PGA 的影响:
如果Memory_target 设置为非0 值
1、sga_target 和 pga_aggregate_target 已经设置大小
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一致
2、sga_target 设置大小, pga_aggregate_target 没有设置大小
pga_aggregate_target初始化值=memory_target-sga_target
3、sga_target 没有设置大小, pga_aggregate_target 设置大小 
sga_target 初始化值=memory_target-pga_aggregate_target
4、sga_target 和 pga_aggregate_target 都没有设置大小
两个值没有最小值和默认值,Oracle 将根据数据库运行状况进行分配大小,但在数据库启动是会有一个固定比例来分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%

如果Memory_target 没有设置为0 
11g 中默认为0 则初始状态下取消了Memory_target 的作用,完全和10g 在内存管理上一致,完全向下兼容。
1、SGA_TARGET设置值
自动调节SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool等内存空间的大小。PGA 则依赖pga_aggregate_target 的大小。
2、SGA_target 和PGA_AGGREGATE_TARGET 都没有设置
SGA 中的各组件大小都要明确设定,不能自动调整各组件大小。PGA不能自动增长和收缩
3: MEMORY_MAX_TARGET 设置而MEMORY_TARGET =0  这种情况先和10g 一样。
在11g 中可以使用下面看各组件的值:
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 18G
memory_target     big integer 18G
parallel_servers_target     integer 256
pga_aggregate_target     big integer 8G
sga_target     big integer 9G

如果需要监视Memory_target 的状况则可以使用下面三个动态试图:
   V$MEMORY_DYNAMIC_COMPONENTS
   V$MEMORY_RESIZE_OPS 
   v$memory_target_advice

一张能直观体现10g和11g的自动内存管理的参数之间的关系的参数关系图:

时间: 2024-09-30 07:22:02

关于oracle11G的自动内存管理MEMORY_TARGET和MEMORY_MAX_TARGET的相关文章

设置ORACLE自动内存管理

文章参考:ORACLE 11g官方文档[Managing Memory] 前言:之前搭建数据库集群环境后,现场的维护人员不知何时改为了手动内存管理,且参数设置存在不合理,导致客户plsql执行报错,如下所示: 查看数据库日志,有如下提示: Wed Mar 15 00:15:08 2017 Errors in file /app/oracle/diag/rdbms/resdb/resdb1/trace/resdb1_ora_12320832.trc  (incident=441054): ORA-

设置数据库为自动内存管理

设置数据库自动内存管理主要是设置两个参数: memory_max_target memory_target 如果这两个参数设置为0说明数据库内存采用手动管理,反之则为自动管理. 关闭数据库. SQL> startup nomount ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 6384M --这里之所以报错是我之前alter system set MEMORY_TARGET='153

Oracle 自动内存管理 SGA、PGA 详解

ASMM自动共享内存管理: 自动根据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 [email protected]>show parameter sga NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ lock_sga                  

自动内存管理算法 —— 标记法

最近阅读了<垃圾回收算法手册>这本经典的书籍,借此机会打算写几篇内存管理算法方面的文章,也算是自己的总结吧. -- 题记 自动内存管理系统 自动内存管理主要面临以下三个方面的任务: 1.为新对象分配内存空间 2.确定"存活"对象 3.回收"死亡"对象所占用的内存空间 其中任务1一般称作"自动内存分配"(Memory Allocation ,下文简称 MA),任务2.3便是常说的"垃圾回收器"(Garbage Col

垃圾回收GC:.Net自动内存管理 上(三)终结器

垃圾回收GC:.Net自动内存管理 上(三)终结器 垃圾回收GC:.Net自动内存管理 上(一)内存分配 垃圾回收GC:.Net自动内存管理 上(二)内存算法 垃圾回收GC:.Net自动内存管理 上(三)终结器 前言 .Net下的GC完全解决了开发者跟踪内存使用以及控制释放内存的窘态.然而,你或午想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包含非常详细的内在算法描述.同时,还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 终结器 GC提供了另外一个能

Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结

1. Arc的使用 Arc是自动内存管理: arc的使用原则 1).只要对象没有任何强类型指针引用就会被释放’. 2).只要对象被任何强类型指针指引就不会被释放. 弱指针:__weak 被__weak修饰的指针就被称为弱型指针: 强类型指针 默认的指针都是强类型指针: 被__strong修饰的指针也是强类型指针. 使用Arc时可以重写dealloc方法,但是在重写方法时不能手动调用[super dealloc]: 在Arc中通过@property生成的属性如果是OC的对象那么要用Strong来修

垃圾回收GC:.Net自动内存管理 上(一)内存分配

垃圾回收GC:.Net自动内存管理 上(一)内存分配 前言 .Net下的GC完全解决了开发者跟踪内存使用以及控制释放内存的窘态.然而,你或许想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包含非常详细的内在算法描述.同时,还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 引子 为你的应用程序实现合理的资源管理是一件困难的,乏味的工作.这可能会把你的注意力从你当前正在解决的实际问题中转移到它身上.那么,如果有一个现有的机制为开发者管理令人厌恶的内存管理,会

垃圾回收算法手册:自动内存管理的艺术 BOOK

垃圾回收算法手册:自动内存管理的艺术 2016-03-18 华章计算机 内容简介 PROSPECTUS 本书是自动内存管理领域的里程碑作品,汇集了这个领域里经过50多年的研究沉积下来的最佳实践,包含当代最重要的垃圾回收策略与技术,著译双馨. 几乎所有的现代编程语言都采用了垃圾回收机制,因此深入了解此方面内容对于所有开发者而言都大有裨益.对于不同垃圾回收器的工作方式,以及当前垃圾回收器所面临的各种问题,这本权威手册都提供了专业的解答.掌握这方面的知识之后,在面对多种不同的垃圾回收器以及各种调节选项

垃圾回收GC:.Net自动内存管理 上(二)内存算法

垃圾回收GC:.Net自动内存管理 上(二)内存算法 垃圾回收GC:.Net自动内存管理 上(一)内存分配 垃圾回收GC:.Net自动内存管理 上(二)内存算法 前言 .Net下的GC完全解决了开发者跟踪内存使用以及控制释放内存的窘态.然而,你或午想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包含非常详细的内在算法描述.同时,还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 内存算法 GC检测用于查看堆中是否有对象不再被程序使用.如果这样的对象存在,这