我们在Oracle10g中进行测试,操作系统是Windows Server 2008 R2 Standard。
点击(此处)折叠或打开
接下来,我们看一下和ASMM相关的两个初始化参数在官方文档中的说明。
属性 |
描述 |
参数类型 |
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。
属性 |
描述 |
参数类型 |
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列来查看。
我们通过show parameter来查看初始化参数值,相关的参数包括sga_max_size、sga_target、pga_aggregate_target等。
点击(此处)折叠或打开
我们通过alter system语句来修改sga_target,需要注意的是,sga_target是个动态参数,而sga_max_size是个静态参数。
这样一来,当修改值<=sga_max_size时,我们可以直接修改sga_target值;但是,当修改值>sga_max_size时,我们必须首先修改sga_max_size参数值,重启数据库使静态参数生效后再去修改sga_target值,否则,数据库会报错。
注意:
修改sga_target值时,不能将参数值设置过小,否则会报错ORA-00827。
首先,尝试将sga_target参数值修改为800M,修改成功;
然后,尝试将sga_target参数值修改为500M,数据库报错ORA-00827,提示“无法将 sga_target 压缩到指定值”;
点击(此处)折叠或打开
点击(此处)折叠或打开
首先,尝试将sga_target参数值修改为2G,数据库报错ORA-00823,提示“指定的 sga_target 的值大于 sga_max_size”;
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
原文:http://blog.itpub.net/30162081/viewspace-1744573/