Oracle ASMM(Automatic Shared Memory Management)


     Oracle的ASMM(Automatic Shared Memory Management) 推出于 10g时 ,实现了Oracle SGA和PGA内部结构的自调节。进入11g之后,Oracle 11g是使用AMM(Automatic Memory Management)的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。

1、SGA_TARGET
         1)SGA_TARGET默认值为0,即ASMM被禁用。需要手动设置SGA各中各组件的大小。
         2)当SGA_TARGET为非0时,则启用ASMM,自动调整以下各组件大小:
            DB buffer cache(default pool)---- 数据高速缓存区
            shared pool ---- 共享池
             large pool ----大池
             streams pool ----流池
             java pool ----Java

          但在10g的 ASSM中, 以下参数仍需要手动指定:
               log buffer
               keep、
                           recycle、
                     以及非标准块缓冲区
                   固定SGA以及其他内部分配。

2、启用ASMM需要将STATISTICS_LEVEL设置成TYPICAL或ALL

3、启用ASMM,自动调整SGA内部组件大小后。若手动指定某一组件值,则该值为该组件的最小值。
     例如: 手动设置SGA_TARGET=8G,SHARE_POOL_SIZE=1G,则ASMM在自动调整SGA内部组件大小时,保证share pool不会低于1G。
              SQL> SELECT component, current_size/1024/1024 size_mb FROM   v$sga_dynamic_components;

4、SGA_MAX_SIZE:
      SGA_MAX_SIZE指定内存中可以分配给SGA的最大值。
      SGA_TARGET是一个动态参数,其最大值为SGA_MAX_SIZE指定的值。

但注意:
 
          在Oracle 10g中,必须将STATISTICS_LEVEL参数设置为TYPICAL (the default) 或者ALL才能启用ASMM功能,如果将其值设置为BASIC,会禁用很多新特性的;
     比如:AWR/ASMM等。

可以使用EM来配置ASMM,当使用EM来配置ASMM和总SGA的值时,EM会自动设置SGA_TARGET的值,并且自动把ASMM SGA中包含的组件的值设置为0.如果使用SQL*Plus来设置SGA_TARGET,必须先把ASMM SGA中包含的组件的值设置为0。

可以通过V$SGA_TARGET_ADVICE视图来查看关于SGA_TARGET值的信息.
SQL> select   *   from   V$SGA_TARGET_ADVICE 

启用ASMM

1.可以通过以下SQL来查看SGA_TARGET的值
  SQL>SELECT ( (SELECT SUM(value) FROM V$SGA) -(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY) ) "SGA_TARGET" FROM DUAL;

2.设置SGA_TARGET的值,可以直接修改初始化参数文件后重启数据库,或者通过下面SQL命令进行修改:
  SQL>ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}];

3.假如你有个本地管理的数据库,实例的SGA_MAX_SIZE=1200M,其他参数配置如下:
  SQL>SHARED_POOL_SIZE = 200M DB_CACHE_SIZE = 500M LARGE_POOL_SIZE=200M

假如SGA查询结果如下:
SQL>SELECT SUM(value) FROM V$SGA;
    1200M
SQL>SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY;
    208M

那么,由于当前使用的内存是208M,MAX SIZE为1200M,所以可以使用如下SQL把SGA的总大小设置为992M:
SQL>ALTER SYSTEM SET SGA_TARGET = 992M;


SQL>ALTER SYSTEM SET SHARED_POOL_SIZE = 0;


SQL>ALTER SYSTEM SET LARGE_POOL_SIZE = 0;

SQL>ALTER SYSTEM SET JAVA_POOL_SIZE = 0;

SQL>ALTER SYSTEM SET DB_CACHE_SIZE = 0;

SQL>ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;






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

转载于:http://blog.itpub.net/30028528/viewspace-1458430/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值