昨天花了些时间总算搞懂了oracle10g中的ASMM和oracle11g中的AMM。下面是总结:
在oracle9i引入了参数pga_aggregate_target对pga进行调整,需要将workarea_size_policy设置为auto才可开启。
在oracle10g中又引入了一个新的参数sga_target来对sga进行自动调整。
在oracle10g之前,sga的各个内存区的大小都需要通过各自的参数指定,并且无法超过参数指定的值,尽管他们之和可能
并没有达到sga的最大限制。此外,一旦分配后,各个区内存只能给本区使用,相互之间是不能共享的。拿sga中最重要的两个内存区BUFFER CACHE和SHARED POOL来说,它们两个对实例性能影响最大,但是就有这样的矛盾存在:
在内存资源 有限的情况下,某些时候数据对cache的需求非常大,为了提高buffer hit,就需要增加buffer cache ,但由于sga有限,只能从其他区“抢”过来---如缩小shared pool,增加buffer cache;而有时又有大块的plsql代码被解析注入内存中,导致shared pool不足,又需要扩大shared pool,这时可能又需要人为干预,从buffer cache中将内存夺回来。, 有了
sga_target这个新特性之后,sga中的这种矛盾就迎刃而解了,这一特性被称为自动共享内存管理Automatic Shared Memory Management(ASMM),有了这个参数之后就不需要为每个内存区指定大小了,sga中各个内存区大小由orale自行控制,不需要人为指定。oracle可以随时调整各个区域的大小,使之达到系统性能最佳状态的合理大小。当我们启用了oracle的ASMM之后,也不是sga中所有区的大小都开始动态起来,只有以下这些区的内存大小动态共享起来:
buffer cache(db_cache_sizee )
shared pool(shared_pool_size )
large pool(large_pool_size )
java pool(java_pool_size )
streams pool(streams_pool_size )
而sga中其他区域的内存大小仍然是固定不共享的,如果需要使用需要配置对应的参数。
在oracle11g中又引入了一个全新的参数--memory_target对sga和pga同时进行调整,有了这个参数就可以对oracle的所有内存进行自动调整。
下面来讲讲ASMM和AMM:
在oracle10g中有自动共享内存管理Automatic Shared Memory Management(ASMM),决定数据库是否是自动共享内存管理的参数有两个:
sga_target和lock_sga。只有当sga_target为非零时才是ASMM,而只有lock_sga=false时ASMM才可用。
在oracle11g中又引入了一个新的技术--自动内存管理Automatic Memory Management(AMM),这个技术可以自动管理oracle的所有内存,包括
sga和pga。决定数据库是否是自动内存管理的参数也有两个:memory_target和lock_sga。只有当memory_target为非零时才是AMM,而只有
lock_sga=false时AMM才可用。
下面用oracle11g来看看这几个参数:
SYS@orcl 03-SEP-14>show parameter memory_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 812M
memory_target为非零,表明此时数据库已经是处于自动内存管理模式了。
下面我们查看sga_target和pga_aggregate_target的值:
SYS@orcl 03-SEP-14>select a.ksppinm name,b.ksppstvl value
2 from x$ksppi a,x$ksppcv b
3 where a.indx=b.indx
4 and
5 a.ksppinm like '%sga_target%';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
sga_target
0
__sga_target
507510784
SYS@orcl 03-SEP-14>select a.ksppinm name,b.ksppstvl value
2 from x$ksppi a,x$ksppcv b
3 where a.indx=b.indx
4 and
5 a.ksppinm like '%pga_aggregate_target%';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
pga_aggregate_target
0
__pga_aggregate_target
343932928
我们把得到的sga_target和pga_aggregate_target的值相加:
SYS@orcl 03-SEP-14>select (507510784+343932928)/1024/1024||'MB'
2 from dual;
(5075
-----
812MB
可以看到,在oracle11g中memory_target的大小就是等于sga_target的大小加上pga_aggregate_target的大小。
还有一点要注意的,如果oracle使用了ASMM或者AMM,那么当我们用show parameter shared_pool_size(db_cache_size,large_pool_size,
streams_pool_size)显示的结果都为零,也就是说只有当我们使用手动内存管理时,以上才会显示非零值,那么我们如何在oracle使用
AMM或者ASMM时查询这些参数的值呢?可以通过视图v$sga_dynamic_components:
SYS@orcl 03-SEP-14>select component,current_size
2 from v$sga_dynamic_components
3 ;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 234881024
large pool 4194304
java pool 4194304
streams pool 0
DEFAULT buffer cache 255852544
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
DEFAULT 32K buffer cache 0
Shared IO Pool 0
ASM Buffer Cache 0
14 rows selected.
在oracle9i引入了参数pga_aggregate_target对pga进行调整,需要将workarea_size_policy设置为auto才可开启。
在oracle10g中又引入了一个新的参数sga_target来对sga进行自动调整。
在oracle10g之前,sga的各个内存区的大小都需要通过各自的参数指定,并且无法超过参数指定的值,尽管他们之和可能
并没有达到sga的最大限制。此外,一旦分配后,各个区内存只能给本区使用,相互之间是不能共享的。拿sga中最重要的两个内存区BUFFER CACHE和SHARED POOL来说,它们两个对实例性能影响最大,但是就有这样的矛盾存在:
在内存资源 有限的情况下,某些时候数据对cache的需求非常大,为了提高buffer hit,就需要增加buffer cache ,但由于sga有限,只能从其他区“抢”过来---如缩小shared pool,增加buffer cache;而有时又有大块的plsql代码被解析注入内存中,导致shared pool不足,又需要扩大shared pool,这时可能又需要人为干预,从buffer cache中将内存夺回来。, 有了
sga_target这个新特性之后,sga中的这种矛盾就迎刃而解了,这一特性被称为自动共享内存管理Automatic Shared Memory Management(ASMM),有了这个参数之后就不需要为每个内存区指定大小了,sga中各个内存区大小由orale自行控制,不需要人为指定。oracle可以随时调整各个区域的大小,使之达到系统性能最佳状态的合理大小。当我们启用了oracle的ASMM之后,也不是sga中所有区的大小都开始动态起来,只有以下这些区的内存大小动态共享起来:
buffer cache(db_cache_sizee )
shared pool(shared_pool_size )
large pool(large_pool_size )
java pool(java_pool_size )
streams pool(streams_pool_size )
而sga中其他区域的内存大小仍然是固定不共享的,如果需要使用需要配置对应的参数。
在oracle11g中又引入了一个全新的参数--memory_target对sga和pga同时进行调整,有了这个参数就可以对oracle的所有内存进行自动调整。
下面来讲讲ASMM和AMM:
在oracle10g中有自动共享内存管理Automatic Shared Memory Management(ASMM),决定数据库是否是自动共享内存管理的参数有两个:
sga_target和lock_sga。只有当sga_target为非零时才是ASMM,而只有lock_sga=false时ASMM才可用。
在oracle11g中又引入了一个新的技术--自动内存管理Automatic Memory Management(AMM),这个技术可以自动管理oracle的所有内存,包括
sga和pga。决定数据库是否是自动内存管理的参数也有两个:memory_target和lock_sga。只有当memory_target为非零时才是AMM,而只有
lock_sga=false时AMM才可用。
下面用oracle11g来看看这几个参数:
SYS@orcl 03-SEP-14>show parameter memory_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 812M
下面我们查看sga_target和pga_aggregate_target的值:
SYS@orcl 03-SEP-14>select a.ksppinm name,b.ksppstvl value
2 from x$ksppi a,x$ksppcv b
3 where a.indx=b.indx
4 and
5 a.ksppinm like '%sga_target%';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
sga_target
0
__sga_target
507510784
2 from x$ksppi a,x$ksppcv b
3 where a.indx=b.indx
4 and
5 a.ksppinm like '%pga_aggregate_target%';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
pga_aggregate_target
0
__pga_aggregate_target
343932928
SYS@orcl 03-SEP-14>select (507510784+343932928)/1024/1024||'MB'
2 from dual;
(5075
-----
812MB
还有一点要注意的,如果oracle使用了ASMM或者AMM,那么当我们用show parameter shared_pool_size(db_cache_size,large_pool_size,
streams_pool_size)显示的结果都为零,也就是说只有当我们使用手动内存管理时,以上才会显示非零值,那么我们如何在oracle使用
AMM或者ASMM时查询这些参数的值呢?可以通过视图v$sga_dynamic_components:
SYS@orcl 03-SEP-14>select component,current_size
2 from v$sga_dynamic_components
3 ;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 234881024
large pool 4194304
java pool 4194304
streams pool 0
DEFAULT buffer cache 255852544
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
DEFAULT 32K buffer cache 0
Shared IO Pool 0
ASM Buffer Cache 0
14 rows selected.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29800581/viewspace-1263875/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29800581/viewspace-1263875/