zoukankan      html  css  js  c++  java
  • Oracle内存管理理论篇二

    目标

    • 了解oracle内存管理方式
    • 掌握ASMM管理方式
    • 掌握AMM管理方式
    • 监控内存使用

      学习一个知识点时,最好先了解其历史。ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Management(ASMM)实现SGA的自动管理,到11g通过Automatic Memory Management(AMM)实现内存(SGA+PGA)的自动管理。目前的11G版本,DBA只需要设置2个或者一个参数,就可以实现ORACLE对内存的自动管理。

    Oracle的内存管理方式

      Oracle 11g 引入参数mymory_max_target 和memory_target 就是oracle的新特性自动内存管理,AMM 的引入,组合出来有 5 种内存管理形式。

    • 自动内存管理(AMM): memory_target=非0,是自动内存管理,如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。
    • 自动共享内存管理(ASMM): 在memory_target=0 and sga_target=非0 是自动内存管理
    • 手工共享内存管理: memory_target=0 and sga_target=0   指定 share_pool_size 、db_cache_size 等 sga 参数
    • 自动 PGA 管理: memory_target=0 and workarea_size_policy=auto  and PGA_AGGREGATE_TARGET=值
    • 手动 PGA 管理: memory_target=0 and workarea_size_policy=manal  然后指定 SORT_AREA_SIZE 等 PGA 参数,一般不使用手动管理PGA

    ASMM管理方式

    1.1 ASMM的管理对象为SGA(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool).
        注:不包含缓冲池(Keep buffer pool;Recycle buffer pool;nK buffer pool)
    1.2 设置ASMM的管理
        i)从手动共享内存管理模式下启用ASMM
            i1) 获取SGA_TARGET的值: 
                  SELECT ((SELECT SUM(value) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)) "SGA_TARGET" 
                  FROM DUAL;         
            i2) 使用该值设置SGA_TARGET。
            i3) 将(SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE,DB_CACHE_SIZE,STREAMS_POOL_SIZE)值设置为0。             
                    
     ii)从自动内存管理模式(AMM)切换到ASMM
        ii1)将初始化参数MEMORY_TARGET 设置为0。
                  ALTER SYSTEM SET MEMORY_TARGET = 0;
                  数据库将根据当前的SGA 内存分配设置SGA_TARGET。
            ii2)将自动设置大小的SGA组件(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool)的值设置为0。
                完成后,重新启动实例 

    AMM管理方式

    1.1 AMM的管理对象为SGA(shared pool;buffer pool;large pool;java pool;stream pool;redo buffer pool)+PGA。注:此时sga_target为0无意义
    1.2 设置AMM的管理 
      1.用sqlplus以sysdba链接数据库
      2.计算MEMORY_TARGET的最小值
      a.确定当前的 SGA_TARGET 和 PGA_AGGREGATE_TARGET
            SQL> show parameter target
            NAME                                 TYPE        VALUE
            ------------------------------------ ----------- ----------------
            archive_lag_target                   integer     0
            db_flashback_retention_target        integer     1440
            fast_start_io_target                 integer     0
            fast_start_mttr_target               integer     0
            memory_max_target                    big integer 0
            memory_target                        big integer 0
            parallel_servers_target              integer     16
            pga_aggregate_target                 big integer 90M
            sga_target                           big integer 272M
        b.查询从数据库启动以来最大的PGA  
            select value from v$pgastat where name='maximum PGA allocated';
      c.计算MEMORY_TARGET
        memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
        例如:SGA_TARGET = 272M ; PGA_AGGREGATE_TARGET = 90M , 且 maximum PGA allocated 为 120M, 那么 MEMORY_TARGET >= 392M (272M + 120M). 
      3.参照2c,修改memory_target的值
        ALTER SYSTEM SET MEMORY_TARGET=392M;
        
    1.3 MEMORY_TARGET,SGA_TARGET和PGA_AGGREGATE_TARGET之间的关系
            如果将SGA_TARGET和PGA_AGGREGATE_TARGET设置为非零值,则可将其分别视为SGA和PGA大小的下限值。
            MEMORY_TARGET 可以采用从SGA_TARGET+PGA_AGGREGATE_TARGET到MEMORY_MAX_SIZE的值 

    监控内存使用

            V$MEMORY_DYNAMIC_COMPONENTS 包含所有内存组件的当前状态
            V$MEMORY_RESIZE_OPS         包含最近完成的800  个内存大小调整请求的循环历史记录缓冲区
            V$MEMORY_TARGET_ADVICE      提供针对MEMORY_TARGET 初始化参数的优化建议
  • 相关阅读:
    install jprofiler for ubuntu
    android manifest相关属性
    install nginx for ubuntu
    Android shape
    mobile web for no cookie session
    Android布局属性
    什么是强类型,强类型集合
    radl (三) (转)
    几个.net 基础问题,自己回答了一些,请大家指教
    c#接口和抽象类的区别
  • 原文地址:https://www.cnblogs.com/polestar/p/3778389.html
Copyright © 2011-2022 走看看