Oracle对内存的管理越来越趋向智能化、自动化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Management(ASMM)实现SGA的自动管理,到11g通过Automatic Memory Management(AMM)实现内存(SGA+PGA)的自动管理。由于11G(AMM)的引入,DBA只需要设置一个或两个参数就可以实现ORACLE对整个内存块的自动管理。memory_max_target参数指定了ORACLE可以分配的最大内存大小,如果不指定memory_target参数,默认为0,即和memory_max_target同样大小。
默认情况下,Oracle 11g是使用AMM的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。
下面介绍一下4个相关的初始化参数。
SGA_MAX_SIZE属性
描述
参数类型
Big integer
语法
SGA_MAX_SIZE = integer [K | M | G]
默认值
数据库启动时SGA的初始化大小,取决于SGA中不同池的大小,例如缓冲区,共享池,大池,等等。
是否可修改
否
取值范围
0~视操作系统而定
SGA_MAX_SIZE指定了实例生命周期内SGA的最大值。
在64位平台或者非32位Windows平台,当MEMORY_TARGET或MEMORY_MAX_TARGET被设定时,SGA_MAX_SIZE会被设置为二者的较大值。这样将会预留更多的地址空间用于扩大SGA。
在32位Windows平台,SGA_MAX_SIZE的默认值是下面几个参数值的最大值:
l 60%*MEMORY_TARGET(如果指定的话)
l 60%*MEMORY_MAX_TARGET (如果指定的话)
l 25%*总的可用虚拟地址空间
SGA_TARGET属性
描述
参数类型
Big integer
语法
SGA_TARGET = integer [K | M | G]
默认值
0(SGA自动调整功能在DEFERRED模式调整请求下被禁用,但是在IMMEDIATE模式调整请求下是允许的)
是否可修改
ALTER SYSTEM
取值范围
64M~视操作系统而定
是否基本参数
是
SGA_TARGET制定了SGA各个组件的总大小。如果SGA_TARGET被指定,那么下面所列出的内存池大小将被自动分配:
l Buffer cache (DB_CACHE_SIZE)
l Shared pool (SHARED_POOL_SIZE)
l Large pool (LARGE_POOL_SIZE)
l Java pool (JAVA_POOL_SIZE)
l Streams pool (STREAMS_POOL_SIZE)
如果上述自动调整的内存池被设置为非零值,那么这些值将被自动共享内存管理系统(ASMM, Automatic Shared Memory Management)视为最小值。如果一个应用组件正常运行要求一个最小数值的内存,那么你就需要设定最小值。
下述内存池需要手工设置大小,不受自动共享内存管理系统(ASMM, Automatic Shared Memory Management)的影响:
l Log buffer
l Other buffer caches, such as KEEP, RECYCLE, and other block sizes
l Fixed SGA and other internal allocations
当自动共享内存管理系统在计算自动调整内存池的具体大小时,会将上述内存池内存从总的可用SGA_TARGET中扣除。
在“默认值”字段中,IMMEDIATE模式自动调整要求是必要的,这样可以避免ORA-04031错误。DEFERRED和IMMEDIATE模式的具体值,可以通过V$MEMORY_RESIZE_OPS视图的OPER_MODE列来查看。
MEMORY_MAX_TARGET属性
描述
参数类型
Big integer
语法
MEMORY _MAX_TARGET = integer [K | M | G]
默认值
0
是否可修改
NO
取值范围
0~Oracle数据库可用物理内存大小
是否基本参数
否
MEMORY_MAX_TARGET指定了一个DBA可以设置MEMORY_TARGET初始化参数的最大值。请参见MEMORY_TARGET的有关描述,获取更多有关MEMORY_MAX_TARGET和MEMORY_TARGET的设置是如何相互影响的信息。
MEMORY_TARGET属性
描述
参数类型
Big integer
语法
MEMORY _TARGET = integer [K | M | G]
默认值
0(SGA自动调整功能在DEFERRED模式调整请求下被禁用,但是在IMMEDIATE模式调整请求下是允许的)
是否可修改
ALTER SYSTEM
取值范围
152M~视操作系统而定
是否基本参数
否
MEMORY_TARGET指定Oracle系统范围的可用内存。数据库将内存大小调整为MEMORY_TARGET的值,根据需要减少或扩大SGA和PGA。
MEMORY_TARGET应该设置大于或等于当前SGA和PGA大小的总和。
在文本初始化参数文件中,如果省略MEMORY_MAX_TARGET并包括一个MEMORY_TARGET值,则数据库会自动将MEMORY_MAX_TARGET的值设置为MEMORY_TARGET的值。如果省略MEMORY_TARGET并包括MEMORY_MAX_TARGET,则MEMORY_TARGET参数默认值为零。在数据库启动后,你可以动态地修改MEMORY_TARGET为非零值,只要它不超过MEMORY_MAX_TARGET的值。
总的内存使用量可以超过MEMORY_TARGET的值。例如,只要在操作系统级别上有可用内存,无论MEMORY_TARGET的值是多少,都可以将内存分配给PL / SQL表和可变数组。
在“默认值”字段中,IMMEDIATE模式自动调整要求是必要的,这样可以避免ORA-04031错误。DEFERRED和IMMEDIATE模式的具体值,可以通过V$MEMORY_RESIZE_OPS视图的OPER_MODE列来查看。
: