oracle11g自动内存管理好吗,关于oracle11G的自动内存管理MEMORY

自动内存管理是用两个初始化参数进行配置的:  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>  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的自动内存管理的参数之间的关系的参数关系图:

302bad67f9dda864b7616bad5169f95e.gif

DSC0000.jpg (46.97 KB, 下载次数: 0)

2015-12-17 15:13 上传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值