Oracle ASMM和AMM

Oracle ASMM和AMM



ASMM(Automatic Shared Memory Management,自动共享内存管理)是Oracle 10g引入的概念。通过使用ASMM,就不需要手工设置相关内存组件的大小,而只为SGA设置一个总的大小,
Oracle的MMAN进程(Memory Manager Process,内存管理进程)会随着时间推移,根据系统负载的变化和内存需要,自动调整SGA中各个组件的内存大小。
ASMM的SGA中包含的组件及对应参数如下表所示:


在Oracle 10g中,必须将STATISTICS_LEVEL参数设置为TYPICAL(默认值)或者ALL才能启用ASMM功能,如果将其值设置为BASIC,那么会禁用很多新特性,比如像AWR、ASMM等。
如果使用SQL*Plus来设置ASMM,那么必须先把SGA中包含的组件的值设置为0。通过设置SGA_TARGET参数为非零值来启用ASMM功能。

可以通过以下SQL来计算SGA_TARGET的值:

SELECT ((SELECT SUM(VALUE) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)) "SGA_TARGET"  FROM DUAL;

设置SGA_TARGET的值,可以直接修改初始化参数文件后重启数据库,或者通过下面SQL命令进行修改:

ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}];

示例如下所示:

ALTER SYSTEM SET SGA_TARGET = 992M;

ALTER SYSTEM SET SHARED_POOL_SIZE = 0;

ALTER SYSTEM SET LARGE_POOL_SIZE = 0;

ALTER SYSTEM SET JAVA_POOL_SIZE = 0;

ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;

ALTER SYSTEM SET DB_CACHE_SIZE = 0;

在启用ASMM后,Oracle会自动调整SGA内部组件大小。若再手动指定某一组件值,则该值为该组件的最小值。例如,手动设置SGA_TARGET=8G,SHARED_POOL_SIZE=1G,
则ASMM在自动调整SGA内部组件大小时,保证Shared Pool不会低于1G。当设置了SGA_TARGET参数后,Oracle将会收集SGA相关的统计数据,并通过V$SGA_TARGET_ADVICE呈现出来,
因此,可以根据这些指导SGA_TARGET做相关的调整,以达到最佳情况。

Oracle 10g的ASMM实现了自动共享内存管理,但是具有一定的局限性。所以,在Oracle 11g中,Oracle引入了AMM(Automatic Memory Management,自动内存管理)的概念,
实现了全部内存的自动管理。DBA可以仅仅通过设置一个目标内存大小的初始化参数(MEMORY_TARGET)和可选最大内存大小初始化参数(MEMORY_MAX_TARGET)就可以在大多数平台上实现AMM。
AMM可以使实例总内存保持相对稳定的状态,Oracle基于MEMORY_TARGET的值来自动调整SGA和PGA的大小。MEMORY_TARGET是动态初始化参数,可以随时修改该参数的值而不用重启数据库。
MEMORY_MAX_TARGET作为一个内存上限值,是一个静态参数,它是MEMORY_TARGET可以被配置的最大值。

如果内存发生变化,实例会自动在SGA和PGA之间做调整。若启用了AMM功能,而SGA_TARGET和PGA_AGGREGATE_TARGET没有显式的被设置,
则默认SGA_TARGET为MEMORY_TARGET的60%,PGA_AGGREGATE_TARGET为MEMORY_TARGET的40%。
如果MEMORY_MAX_TARGET设置为1400M,而MEMORY_TARGET设置为1000M,那么对于数据库实例而言,只有1000M可以使用,剩下的400M会被保留下来,
但会被Oracle的MMAN进程锁定。但是,因为MEMORY_MAX_TARGET是显式设置的,所以,可以在不重启数据库的情况下动态调整MEMORY_TARGET。
如果只设置了MEMORY_TARGET的值,而MEMORY_MAX_TARGET没有显式设置,那么MEMORY_MAX_TARGET的值默认是MEMORY_TARGET的大小。

当LOCK_SGA初始化参数的值设置为TRUE时,不能启用AMM,该参数的值默认为FALSE。

只要是设置了MEMORY_MAX_TARGET或MEMORY_TARGET,那么就说明启用了AMM。可以使用视图V$MEMORY_DYNAMIC_COMPONENTS动态查阅内存各组件的当前实时大小。

如果在创建数据库的时候未启用AMM,那么可以在建库后启用它,启用AMM需要重启数据库,具体步骤如下所示:

1、查询SGA_TARGET和PGA_AGGREGATE_TARGET的值,从而确定MEMORY_TARGET的最小值

SYS@lhrdb> SHOW PARAMETER TARGET

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 409M

sga_target                           big integer 1648M

2、确定自系统启动以来PGA的最大值,单位为bytes

SYS@lhrdb> select value from v$pgastat where name='maximum PGA allocated';

     VALUE

----------

 248586240

3、通过以下方法来计算出SGA_TARGET的最大值

memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)

例如:在这里,SGA_TARGET的值为1648M,PGA_AGGREGATE_TARGET的值为409M,PGA的最大值为248586240/1024/1024=237M,所以,MEMORY_TARGET的值至少为1648+409=2057M。

4、设置系统参数启用AMM

ALTER SYSTEM SET MEMORY_MAX_TARGET = 2100M  SCOPE=SPFILE;

--重启数据库

ALTER SYSTEM SET MEMORY_TARGET = 2057M;

ALTER SYSTEM SET SGA_TARGET = 0;

ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

另外需要说明的一点是,使用AMM经常出现的一个错误是“ORA-00845: MEMORY_TARGET not supported on this system”。

[ZFZHLHRDB1:oracle]:/oracle>oerr ora 845

00845, 00000, "MEMORY_TARGET not supported on this system"

// *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux.

// *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.

这个错误原因是操作系统不支持MEMORY_TARGET参数或/dev/shm的大小设置不正确。解决方法就是将/dev/shm的值增大,至少需要大于数据库参数MEMORY_MAX_TARGET的值。修改步骤如下:

[root@LHRDB ~]# cat /etc/fstab | grep tmpfs    #查看/dev/shm大小

tmpfs                   /dev/shm                tmpfs   defaults,size=1G 0 0

[root@LHRDB ~]# mount -o remount,size=4G /dev/shm     #临时修改/dev/shm大小

[root@LHRDB ~]# vi /etc/fstab  #永久修改/dev/shm大小, tmpfs /dev/shm tmpfs defaults,size=4G 0 0

[root@LHRDB ~]# df -h | grep shm

tmpfs                 4.0G     0  4.0G   0% /dev/shm

[root@LHRDB ~]# df -h /dev/shm/

Filesystem      Size  Used Avail Use% Mounted on

tmpfs            4.0G    0    4.0G  0%   /dev/shm

[root@LHRDB ~]# cat /etc/fstab | grep tmpfs

tmpfs                   /dev/shm                tmpfs   defaults,size=4G        0 0

再次启动数据库就可以正常启动了。

由于AMM不支持HugePage,而ASMM支持HugePage,所以,在生产库上强烈推荐使用ASMM。有关ASMM和AMM的区别如下表所示:

表 3-10 ASMM和AMM的区别

MOS



  

 

 

 

 

 

 

 

 

>

                 

 

 

 

 

>

 

                                         

                        

             

                      

                    

                    

                        

                   

                 

                           

 

 

 

 

 

 

                                          

                                           

                                         

                        

 

 

 

 

>

                                         

                                     

 

>

 

 

 

 

>

 

>

 

>

 

>

 

>

 

 

 

 

>

>

 

  

                  

             

           

                

 

>

                                         

                        

             

                      

                    

                    

                        

                   

                 

                           

 

 

 

 

                                          

                                              

                                              

                          

 

 

 

 

 

>

 

>

 

>

 

>

 

>

 

 

 

 

>

>

 

 

 

 

 

>

    

 

 

 

 

 

 

 

>

>

 

  

                  

             

           

                

>

 

                                         

                        

             

                      

                    

                    

                        

                   

                 

                           

 

>

    

 

 

 

 

 

>

 

  

                  

             

           

                

 

 

                                          

                                          

                                        

                      

 

    

      

      

     

 

 

 



    •          
    •           
    •     
    •         
    •  
    •    
  •     
  •    
  •    

<>

>>>

>


>>>


 
 
 
 
 
 
 
 
 
 
 

          

>
  

                  <
  <

>

    <

    <

>

                                  

                 
         

>

                           

                             
                             

>

                                  

                 
         

>

                           

                             
                             

>

                                  

                  
         

>

                           

                             
                             




 
 
 
 
 

 

 

 

 
 
 
 
 

 

 

 
 
 
 



    

时间: 2024-10-27 13:31:46

Oracle ASMM和AMM的相关文章

小麦苗BLOG文章索引

小麦苗BLOG文章索引            自从2014年7月1号开始写blog到2015年5月5日,历时10个月的时间,大概写了90篇文章,这blog多了就乱了,今天抽空出来整理整理,方便大家也方便自己阅读,本文将一直更新,另外,最后我把所有的blog文章全列出来,可能会有用.    小麦苗的所有文章:itpub文章链接-小麦苗.zip     2015年06月03日更新一次,我写的blog数量:109 篇    2015年07月03日更新一次,我写的blog数量:126 篇    2016

Oracle 11g AMM与ASMM切换

  现在的Oracle正在往智能化方向发展.如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题.但是进入10g之后,自动内存池调节成为一个重要Oracle特性.   在10g时,Oracle推出了ASMM(Automatic Shared Memory Management),实现了Oracle SGA和PGA内部结构的自调节.进入11g之后,AMM(Automatic Memory Management)实现了参数MEMORY_TARGET,

ASMM 导致的latch: library cache 和latch: shared pool

核心系统故障及调整报告核心系统数据库在2012年7月13日下午2点到4点和2012年7月16上午11点出现了高负载,影响了核心系统的正常使用,我随即进行了性能分析.得出报告如下:2012年7月13日 Snap Id Snap Time Sessions Cursors/SessionBegin Snap: 28264 13-Jul-12 14:00:26 173 14.3End Snap: 28265 13-Jul-12 15:00:17 189 15.0Elapsed:   59.84 (mi

HugePage优点缺点大盘点

话题 Topic 一起来谈谈HugePage的优点或缺点,各位一线的兄弟们谈谈实战情况,二线的谈谈理论方法吧.(本期话题贡献人:杨建荣)       优点    杨建荣_北京:HugePage是Linux内核上一种使用内存块的方法.作为传统4K Page的替代,HugePage在大部分场景下可以提升Oracle实例的运行性能效率,O官网也提供了计算HugePage的脚本.从我们的实践来看,优点确实很多,主要是swap极低,tlb减轻,直观感受就是iowait很低,前几条做的测试,没启用iowai

【书】《数据库面试笔试宝典系列》简介

[书]<Oracle数据库面试笔试宝典>相关内容 目录 目录 - 1 - 内容介绍 - 8 - 作者简介 - 8 - 序言 - 9 - 前言 - 10 - 上篇 面试笔试经验技巧篇 - 13 - 第1章 求职经验分享 - 13 - 1.1 踩别人没有踩过的坑,犯别人没有犯过的错 - 13 - 1.2 只要肯钻研,就能成大咖 - 14 - 1.3 普通DBA的逆袭经验 - 14 - 第2章 数据库程序员的求职现状 - 15 - 2.1 当前市场对于数据库程序员的需求如何?待遇如何? - 15 -

ORA-04031错误

ORA-04031错误 ORA-4031 错误故障排除与诊断[视频] (文档 ID 2016002.1).Troubleshooting and Diagnosing ORA-4031 Error [Video] (文档 ID 396940.1) 文档内容 用途   常见 Bug 问题和答案   在 SGA 池中内存是如何分配和释放的?   什么是子池(Subpools)?   什么是保留区域?   SGA 中的各池的作用是什么?   ORA-4031 错误是什么?   我的保留区域大小是否合适

linux下/dev/shm的大小引发ORA-00845: MEMORY_TARGET not supported on this system 2015-06-16 08:55:50

Linux操作系统,oracle 11.2.0.4 启动实例时出现如下错误: SQL> startup nomount pfile=/u03/app/oracle/11.2.0/db/dbs/initcssb.ora ORA-00845: MEMORY_TARGET not supported on this system 查看错误帮助信息 [oracle11@oracle11g dbs]$ oerr ora 845 00845, 00000, "MEMORY_TARGET not sup

/dev/shm(转)

引用网上:/dev/shm首先可以看出来/dev/shm是一个设备文件, 可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,一个tmp filesystem, 你可以通过这个设备向内存中读写文件, 以加快某些I/O高的操作,比如对一个大型文件频繁的open, write, read,据说oracle就利用了/dev/shm(shitou没用过oracle), 可以通过mount命令列出当前的/dev/shm的挂载的文件系统, 你可以直接对/dev/shm进行读写操作,

/dev/shm

/dev/shm理论 /dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里.因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果. /dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到.但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节:如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可