关于ASMM和AMM

关于ASMM和AMM
http://blog.itpub.net/29800581/viewspace-1263875/
http://blog.csdn.net/deanza/article/details/9635461



现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。 在10g时,Oracle推出了ASMMAutomatic Shared Memory Management),实现了Oracle SGA和PGA内部结构的自调节。进入11g之后,AMM(Automatic Memory Management)实现了参数MEMORY_TARGET,将SGA和PGA的规划全部统筹起来对待。 默认情况下,Oracle 11g是使用AMM的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。 同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。 

昨天花了些时间总算搞懂了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的值:
select a.ksppinm name,b.ksppstvl value
    from x$ksppi a,x$ksppcv b
    where a.indx=b.indx
    and 
    a.ksppinm like '%sga_target%';

NAME                              VALUE
--------------------------------------------------------------------------------
sga_target                     0
__sga_target                  507510784

select a.ksppinm name,b.ksppstvl value
    from x$ksppi a,x$ksppcv b
    where a.indx=b.indx
    and
    a.ksppinm like '%pga_aggregate_target%'; 

NAME                                VALUE
--------------------------------------------------------------------------------
pga_aggregate_target        0
__pga_aggregate_target     343932928

我们把得到的sga_target和pga_aggregate_target的值相加:
select (507510784+343932928)/1024/1024 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:
select component,current_size 
    from v$sga_dynamic_components; 

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.

================补充====================

内存管理-AMM与ASMM

参见官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e25494/memory.htm#ADMIN00207

Oralce内存的自动管理- AMM与ASMM

AMM表示SGA,PGA等都会自动管理。
MMM表示SGA,PGA需要手动设置,但SGA又分为MSMM和ASMM。

自动内存管理(AMM),包含SGA,PGA。
自动共享内存管理(ASMM),包含SGA中的1 cache和4 pool。

注意以下几个关键字的参数的构成。
SGA_TARGET SGA_MAX_SIZE
MEMORY_TARGET MEMORY_MAX_SIZE
pga_aggregate_target
db_cache_size
shared_pool_size java_pool_size large_pool_size streams_pool_size

另外注意这几个参数
LOG_BUFFER
DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE
DB_nK_CACHE_SIZE

ASMM指的是SGA中的1个cache,4和pool(db_cache_size,shared_pool_size java_pool_size large_pool_size streams_pool_size)的管理。
SGA中的下面3项不接受ASMM管理,即LOG_BUFFER,DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE,DB_nK_CACHE_SIZE。

修改前内存参数配置为AMM
SQL> select * from v$sgainfo;
NAME                                  BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size                      2228440 No
Redo Buffers                        3637248 No
Buffer Cache Size                 171966464 Yes
Shared Pool Size                  146800640 Yes
Large Pool Size                     4194304 Yes
Java Pool Size                      4194304 Yes
Streams Pool Size                         0 Yes
Shared IO Pool Size                       0 Yes
Granule Size                        4194304 No
Maximum SGA Size                  559517696 No
Startup overhead in Shared Pool    67108864 No
NAME                                  BYTES RES
-------------------------------- ---------- ---
Free SGA Memory Available         226492416

12 rows selected.

SQL> set linesize 200
SQL> set pagesize 100
SQL> show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 536M
sga_target                           big integer 0

SQL> show parameter memory

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 536M
memory_target                        big integer 536M
shared_memory_address                integer     0
SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 0

SQL> show parameter buffer    
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
db_block_buffers                     integer     0
log_buffer                           integer     3424256
use_indirect_data_buffers            boolean     FALSE

SQL> show parameter pool
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size             string
java_pool_size                       big integer 0
large_pool_size                      big integer 0
olap_page_pool_size                  big integer 0
shared_pool_reserved_size            big integer 7M
shared_pool_size                     big integer 0
streams_pool_size                    big integer 0

SQL> show parameter cache
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag              big integer 3000
client_result_cache_size             big integer 0
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
db_cache_advice                      string      ON
db_cache_size                        big integer 0
db_flash_cache_file                  string
db_flash_cache_size                  big integer 0
db_keep_cache_size                   big integer 0
db_recycle_cache_size                big integer 0
object_cache_max_size_percent        integer     10
object_cache_optimal_size            integer     102400
result_cache_max_result              integer     5
result_cache_max_size                big integer 1376K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0
session_cached_cursors               integer     50

SQL> select * from v$sga_target_advice;
  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
       160              .5           51              1.0536                8732
       240             .75           48                   1                8676
       320               1           48                   1                8676
       400            1.25           48                   1                8676
       480             1.5           48                   1                8676
       560            1.75           48                   1                8676
       640               2           48                   1                8676

7 rows selected.

AMM->MMM+ASMM参数修改(修改先memory_target的参数为0,再给sga_target设一个值,如果不设置,系统会把当前自动的sga值设置为sga_target)
SQL> select * from v$sga_target_advice;
  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
       160              .5           73                1.45               13760
       240             .75           50                   1               10098
       320               1           50                   1               10084
       400            1.25           50                   1               10084
       480             1.5           50                   1               10084
       560            1.75           50                   1               10084
       640               2           50                   1               10084

7 rows selected.

SQL> alter system set memory_target=0;

System altered.

SQL> alter system set sga_target=320M scope=both;

System altered.

SQL> show parameter sga 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 536M
sga_target                           big integer 320M

SQL> show parameter memory
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 536M
memory_target                        big integer 0
shared_memory_address                integer     0

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 216M

SQL> shutdown immediate 
SQL> startup
Oracle instance started.
Total System Global Area  334036992 bytes
Fixed Size                  2226272 bytes
Variable Size             155191200 bytes
Database Buffers          171966464 bytes
Redo Buffers                4653056 bytes
Database mounted.
Database opened.

SQL> show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 320M
sga_target                           big integer 320M

SQL> show parameter memory
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 0
memory_target                        big integer 0
shared_memory_address                integer     0

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 216M


MMM+ASMM->AMM修改参数
SQL> show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 320M
sga_target                           big integer 320M

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 216M

SQL> show parameter memory  
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 0
memory_target                        big integer 0
shared_memory_address                integer     0

SQL> alter system set memory_target=536M scope=spfile;

SQL> alter system set sga_target=0;--如果不改为0,如果改为大于320M的值,启动时会memory_target报错,建议改为0。

SQL> shutdown immediate;

SQL> startup;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值