关于ASMM和AMM

昨天花了些时间总算搞懂了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.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29800581/viewspace-1263875/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29800581/viewspace-1263875/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值