关于memory_max_target,memory_target,sga_max_size,sga_target

首先先看下11gr2的oracle的帮助文档中关于这几个参数的解释:

MEMORY_TARGET

Property        Description

Parameter type        Big integer

Syntax        MEMORY_TARGET = integer [K | M | G]

Default value        0 (SGA autotuning is disabled for DEFERRED mode autotuning requests, but allowed for IMMEDIATE mode autotuning requests)

Modifiable        ALTER SYSTEM

Range of values        152 MB to MEMORY_MAX_TARGET

Basic        No

MEMORY_TARGET specifies the Oracle system-wide usable memory. The database tunes memory to the MEMORY_TARGET value, reducing or enlarging the SGA and PGA as needed.

In a text-based initialization parameter file, if you omit MEMORY_MAX_TARGET and include a value for MEMORY_TARGET, then the database automatically sets MEMORY_MAX_TARGET to the value of MEMORY_TARGET. If you omit the line for MEMORY_TARGET and include a value for MEMORY_MAX_TARGET, the MEMORY_TARGET parameter defaults to zero. After startup, you can then dynamically change MEMORY_TARGET to a nonzero value, provided that it does not exceed the value of MEMORY_MAX_TARGET.

Total memory usage can grow beyond the value of MEMORY_TARGET. For example, memory is allocated to PL/SQL tables and varrays regardless of the value of MEMORY_TARGET as long as memory is available at the operating system level.

In the Default value field, IMMEDIATE mode autotuning requests are necessary to avoid ORA-04031 errors. The DEFERRED and IMMEDIATE modes are reflected in the OPER_MODE column of the V$MEMORY_RESIZE_OPS view.

MEMORY_MAX_TARGET

Property        Description

Parameter type        Big integer

Syntax        MEMORY_MAX_TARGET = integer [K | M | G]

Default value        0

Modifiable        No

Range of values        0 to the physical memory size available to the Oracle Database

Basic        No

MEMORY_MAX_TARGET specifies the maximum value to which a DBA can set the MEMORY_TARGET initialization parameter. See the description of MEMORY_TARGET for more information about how the settings of MEMORY_MAX_TARGET and MEMORY_TARGET affect each other.

从上面描述中可以先明确几点:
1、memory_max_target值限制了memory_targe的值。如果你需要加大memory_target并且加大的值大于memory_max_target值需要先把memory_max_target 值调大。
2、如果没有设置memory_max_target参数,那么memory_max_target会自动取memory_target的参数值。
3、如果没有设置memory_target但是设置了memory_max_target,那么memory_target默认为0,需要手动设置大小
4、如果memory_target为0,那么需要数据库的模式为 IMMEDIATE mode,否则会报ORA-04031错误。这点我在11.1.0.7环境中未验证,不知道是否是11.2的,V$MEMORY_RESIZE_OPS这个视图中的  OPER_MODE都是空列.
另外,根据已经测试的情况:
1、初始话参数中不存在memory_max_target和memory_target,默认值为系统的shm的值,而shm值为系统物理内存的一半。
2、要改大memory_target需要先调整shm的值,然后修改memory_max_target,最后调整memory_target。
3、调整方法是shm需要umount /dev/shm,然后在fstab文件中default列后面加上:,sieze=nM,n为需要调整的内存值,一般我会把n值比要设置的memory_max_target大一些,接着mount /dev/shm,shm值就调整好了。另外umount之前需要把数据库和集群都关闭,否则shm无法umount。
4、memory_max_target是静态参数,修改的时候只能指定scope=spfile参数,memory_target是动态参数,可以直接修改,但是修改的时候还是必须保证修改的值小于memory_max_target的值,所以在增大玩memory_max_target后需要重启数据库保证参数生效才行。另外在集群环境下memory_target参数是单实例修改,需要后面加上参数sid='*'表示全部实例修改。

再来看下sga的2个参数:

SGA_MAX_SIZE

Property Description
Parameter type Big integer
Syntax SGA_MAX_SIZE = integer [K | M | G]
Default value Initial size of SGA at startup, dependent on the sizes of different pools in the SGA, such as buffer cache, shared pool, large pool, and so on.
Modifiable No
Range of values 0 to operating system-dependent

SGA_MAX_SIZE specifies the maximum size of the SGA for the lifetime of the instance.

On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET or MEMORY_MAX_TARGET is specified, the default value of SGA_MAX_SIZE is set to the larger of the two parameters. This causes more address space to be reserved for expansion of the SGA.

On Windows 32-bit platforms, the default value of SGA_MAX_SIZE is the largest of the following values:

  • 60% of MEMORY_TARGET, if specified
  • 60% of MEMORY_MAX_TARGET, if specified
  • 25% of the total available virtual address space

SGA_TARGET

Property Description
Parameter type Big integer
Syntax SGA_TARGET = integer [K | M | G]
Default value 0 (SGA autotuning is disabled for DEFERRED mode autotuning requests, but allowed for IMMEDIATE mode autotuning requests)
Modifiable ALTER SYSTEM
Range of values 64 MB to operating system-dependent
Basic Yes

SGA_TARGET specifies the total size of all SGA components. If SGA_TARGET is specified, then the following memory pools are automatically sized:

  • Buffer cache (DB_CACHE_SIZE)
  • Shared pool (SHARED_POOL_SIZE)
  • Large pool (LARGE_POOL_SIZE)
  • Java pool (JAVA_POOL_SIZE)
  • Streams pool (STREAMS_POOL_SIZE)

If these automatically tuned memory pools are set to nonzero values, then those values are used as minimum levels by Automatic Shared Memory Management. You would set minimum values if an application component needs a minimum amount of memory to function properly.

The following pools are manually sized components and are not affected by Automatic Shared Memory Management:

  • Log buffer
  • Other buffer caches, such as KEEP, RECYCLE, and other block sizes
  • Fixed SGA and other internal allocations

The memory allocated to these pools is deducted from the total available for SGA_TARGET when Automatic Shared Memory Management computes the values of the automatically tuned memory pools.

In the Default value field, IMMEDIATE mode autotuning requests are necessary to avoid ORA-04031 errors. The DEFERRED and IMMEDIATE modes are reflected in the OPER_MODE column of the V$MEMORY_RESIZE_OPS view.

这边可以看到sga_max_size、
sga_target和前面的memory类似,不过sga_target参数的介绍关于默认值0可能有问题,按http://docs.oracle.com/cd/E11882_01/server.112/e25494/memory003.htm#BGBJAHEJ
这个文档的说法开启AMM( Automatic Memory Management)的方法就是设置sga_target=0,同样在11.1中的
V$MEMORY_RESIZE_OPS 视图也没有看到OPEN_MODE的值。

关于设置
sga_max_size、 sga_target 的参数可以参看下这篇文档,http://docs.oracle.com/cd/E11882_01/server.112/e25494/memory004.htm#BGBFDFJB
实际测试中发现默认的初始化文件中是不存在
sga_max_size,也不要去手动设置这个参数值,一旦使用alter system set 
sga_max_size 后参数文件中就会加上这个参数,而且不能设置成0,所以如果不小心设置了
sga_max_size 最好的方法是先生成pfile文件,将该参数删除在用pfile文件生成spfile文件,如果在集群环境下生成spfile的文件切记加上spfile文件的路径,否则会生成到dbs路径下。

AMM和ASMM( Automatic SGA Memory)这2者的区别就在于sga_target这个值,如果是0表示开启了AMM来管理sga,否则用开启ASMM管理sga。AMM是11g新增的功能,10g新增了ASMM,9i新增了APM( Automatic PGA Memory)

大概就这些先,有问题的请留言。

时间: 2024-10-26 14:01:18

关于memory_max_target,memory_target,sga_max_size,sga_target的相关文章

Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存

Oracle结果集缓存(Result Cache)--服务器.客户端.函数缓存 在11g中,Oracle提供了结果集缓存特性.该缓存是在共享内存中存储全部的结果集,如果一个查询SQL被执行,且它对应的结果集在缓存中,那么,该SQL的几乎全部开销都可以避免.这些开销包括,解析时间.逻辑读.物理读和任意的通常可能会遭遇的争用.但是,在实际的情况中,结果集缓存仅在少数的情况下是有效的,原因有如下几点: (1)有数据重叠的多个SQL会在缓存中保存冗余的数据. (2)对依赖对象的任何改变(包括对查询中引用

sga_target和sga_max_size

sga_target和sga_max_size  1.说明 sga_max_size是从9i以来就有的作为设置SGA大小的一个参数,而SGA_TARGET则是从10g才有的一个新参数,作为配合10g自动管理SGA而出现的 sga_target是10g的新特性,只要sga_target为非零值,那么内存组件就是采用动态分配原则,由Oracle自动调整各内存组件的大小.  2.参数查看: SQL> show parameter sga NAME      TYPE VALUE -----------

ORA-00845 MEMORY_TARGET not supported on this system

ORA-00845: MEMORY_TARGET not supported on this system 我建立虚拟机的时候 选择的是8G的内存,但是检查的时候报错,我只有4G提示 Swap分区不够, 其实是可以使用DD命令解决的.  GG 同步不起. 解决Linux上11g的ORA-00845错误 下午想把一个11.2.0.2实例的memory_target AMM内存初始化参数修改到2000M,改好后重启发现实例起不来了,出现了ORA-00845错误: [oracle@rh2 ~]$ [o

ORA-04031错误

ORA-04031错误 ORA-4031 错误故障排除与诊断[视频] (文档 ID 2016002.1).Troubleshooting and Diagnosing ORA-4031 Error [Video] (文档 ID 396940.1) 文档内容 用途   常见 Bug 问题和答案   在 SGA 池中内存是如何分配和释放的?   什么是子池(Subpools)?   什么是保留区域?   SGA 中的各池的作用是什么?   ORA-4031 错误是什么?   我的保留区域大小是否合适

Linux内核参数及Oracle相关参数调整

我们一般在Linux 上安装设置Oracle 数据库或者在更换或升级硬件的时候都需要配置Linux 系统的核心参数, 然后才是调整Oracle 系统参数 .具体这些 参数的实质意义是什么,为什么要做调整,如何合理调整? 带着这些问题我们做以下的一些分析以及测试. 注意: 以下的一些测试可能只适用于Linux  系统,且测试Linux 系统为64Bit,32Bit Linux 系统可能有不一样 . 测试环境: Linux AS 4.0 U5 64Bit 核心版本: 2.6.9-55.ELsmp #

共享池的调整与优化(Shared pool Tuning)

--======================================= -- 共享池的调整与优化(Shared pool Tuning) --=======================================       共享池(Shared pool)是SGA中最关键的内存片段,共享池主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成.其中库缓存的作用是存 放频繁使用的sql,pl/sql代码以及执行计划.数据字段缓存用于缓存数据字典.在内存空间有限的容量下

调试上线前的数据库需要额外关注哪些参数

  话题 Topic 从基础建设见功底,一套数据库上线前的调试过程,哪些参数设置是需要额外关注的?大家发挥想象,从隐患和性能角度,从Oracle11.2.0.4角度,平台以aix和linux为主.(本期话题贡献人:李广才)      发起人观点    杨建荣_北京:数据库升级中的参数考虑,可以分成几个方向:哪些是通用参数,是否有标准:哪些是性能参数,需要怎么考虑:哪些是过期参数,哪些是新特性参数,是否需要,比如segment deferred creation,case sensatitive的

oracle 内存分配调优

linux环境安装oracle时候,CentOS 5.8 64bit安装oracle10g 64bit.那么shmmax/shmall和sga_max_size/sga_target这4个参数到底应该设置多大呢?因为每个数据库需求和压力都不尽相同,这里只能给出一些相对值供大家参考. 1.两个参考参考值1:OLTP服务器8Gkernel.shmall = 2097152kernel.shmmax = 8589934592sga_max_size big integer 4Gsga_target b

[20111230]11Gr2 result cache[1].txt

11G的result cache是一个很吸引人的特性,可以大幅减少逻辑读取,特别对于一些经常执行的语句,而结果不是经常变化的,效果不错,我的测试遇到一个小问题. SQL> select * from v$version; BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0