oracle memory max target,关于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, valueFROM   v$parameterWHERE  name IN ('pga_aggregate_target', 'sga_target')UNIONSELECT 'maximum PGA allocated' AS name, TO_CHAR(value) AS valueFROM   v$pgastatWHERE  name = 'maximum PGA allocated';2.SELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_targetFROM (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_OPSV$MEMORY_DYNAMIC_COMPONENTSV$MEMORY_RESIZE_OPSV$MEMORY_TARGET_ADVICE为每个动态组件分配的内存大小使用视图V$MEMORY_DYNAMIC_COMPONENTS显示:SELECT  component, current_size, min_size, max_sizeFROM    v$memory_dynamic_componentsWHERE   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_target3、sga_target 没有设置大小, pga_aggregate_target 设置大小sga_target 初始化值=memory_target-pga_aggregate_target4、sga_target 和 pga_aggregate_target 都没有设置大小两个值没有最小值和默认值,Oracle 将根据数据库运行状况进行分配大小,但在数据库启动是会有一个固定比例来分配:sga_target =memory_target *60%pga_aggregate_target=memory_target *40%如果Memory_target 没有设置为011g 中默认为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 targetNAME    TYPEVALUE------------------------------------ ----------- ------------------------------archive_lag_target    integer0db_flashback_retention_target    integer1440fast_start_io_target    integer0fast_start_mttr_target    integer0memory_max_target    big integer 18Gmemory_target    big integer 18Gparallel_servers_target     integer256pga_aggregate_target    big integer 8Gsga_target    big integer 9G如果需要监视Memory_target 的状况则可以使用下面三个动态试图:V$MEMORY_DYNAMIC_COMPONENTSV$MEMORY_RESIZE_OPSv$memory_target_advice一张能直观体现10g和11g的自动内存管理的参数之间的关系的参数关系图:

24107336_1401519841mb22.jpg

配置 Oracle 数据库的 `MEMORY_TARGET` 参数通常在数据库的初始化参数文件(如 `init.ora` 或 `spfile.ora`)中完成。`MEMORY_TARGET` 是一个动态参数,它允许 Oracle 自动管理 SGA(System Global Area,系统全局区)和 PGA(Process Global Area,进程全局区)的内存分配。这个参数在 Oracle 11g 引入,并在后续版本中得到增强。 具体步骤如下: 1. 首先确定当前的 `SGA_TARGET` 和 `PGA_AGGREGATE_TARGET` 参数设置。因为设置 `MEMORY_TARGET` 后,这两个参数将被自动管理,所以应该检查它们的当前值。 2. 通过 SQL*Plus 或者 Oracle Enterprise Manager 连接到数据库,并以管理员身份登录。 3. 使用 `ALTER SYSTEM` 命令来修改 `MEMORY_TARGET` 参数。例如,如果你想设置 `MEMORY_TARGET` 为 4GB,可以使用如下命令: ```sql ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=BOTH; ``` `SCOPE=BOTH` 表示修改立即生效,并且会被写入到参数文件中,这样在数据库重启后,修改也会保留。 4. 修改完毕后,Oracle 会根据配置自动调整 SGA 和 PGA 的大小,以最优化数据库的性能。 5. 验证 `MEMORY_TARGET` 是否正确设置,可以查询 `V$MEMORY_TARGET_ADVICE` 视图,来查看不同内存目标下的数据库性能建议。 注意事项: - 修改 `MEMORY_TARGET` 参数前,确保服务器有足够的物理内存来支持设定的值,以避免内存不足的问题。 - 根据数据库的工作负载和运行状况,可能需要调整 `MEMORY_MAX_TARGET` 参数,它是 `MEMORY_TARGET` 参数可以增加到的最大值。 - 进行修改之前,最好先参考 Oracle 官方文档和最佳实践,确保参数调整对你的数据库环境是安全且合适的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值