ITPub博客

首页 > 数据库 > Oracle > Oracle ASMM(Automatic Shared Memory Management)

Oracle ASMM(Automatic Shared Memory Management)

原创 Oracle 作者:徐志定 时间:2015-03-13 14:32:57 0 删除 编辑

     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博客 ” ,链接:https://blog.itpub.net/30028528/viewspace-1458430/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-12-02

  • 博文量
    20
  • 访问量
    86873