zoukankan      html  css  js  c++  java
  • 《Administrator's Guide》之Managing Memory

    Automatic Memory Management

    1. 如果要启动Automatic Memory Management,如何确定MEMORY_TARGET的值呢?

        1> 在SQL*Plus下show parameter 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     256
    pga_aggregate_target                 big integer 4779M
    sga_target                           big integer 14368M

       2> 确定maximum PGA allocated的值

    SQL> select value/1024/1024 from v$pgastat where name='maximum PGA allocated';
    
    VALUE/1024/1024
    ---------------
         4331.59961

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

             在本例中,则memory_target至少为14368+4779=19147M

    2. 如何优化Memory Target Size,SGA Target Size,PGA Target Size。

       可分别查询V$MEMORY_TARGET_ADVICE,V$SGA_TARGET_ADVICE,V$PGA_TARGET_ADVICE表,下面以V$SGA_TARGET_ADVICE为例。

    SQL> select * from v$sga_target_advice order by sga_size;
     
      SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
    ---------- --------------- ------------ ------------------- -------------------
           290              .5       448176              1.6578             1636103
           435             .75       339336              1.2552             1636103
           580               1       270344                   1             1201780
           725            1.25       239038               .8842              907584
           870             1.5       211517               .7824              513881
          1015            1.75       201866               .7467              513881
          1160               2       200703               .7424              513881

        SGA_SIZE_FACTOR和ESTD_DB_TIME_FACTOR为1的行对应的是当前SGA的值,该本例中,当前SGA的SIZE为580M。可根据ESTD_DB_TIME和ESTD_PHYSICAL_READS的期望值来相应调整SGA的值。

    3. 关于MEMORY_TARGET和MEMORY_MAX_TARGET的关系

    MEMORY_TARGET是动态参数,可在数据库运行过程中动态修改,MEMORY_MAX_TARGET是静态参数,只有重启数据库才能生效。MEMORY_TARGET的值不能超过MEMORY_MAX_TARGET。设置MEMORY_MAX_TARGET有两个好处:一、防止意外将MEMORY_TARGET的设置得过高。二、为将来增大MEMORY_TARGET的值保留空间。

    在pfile中,如果你忽略了MEMORY_MAX_TARGET的值,只设置了MEMORY_TARGET的值,则MEMORY_MAX_TARGET默认将设置为MEMORY_TARGET的值。如果只设置了MEMORY_MAX_TARGET的值,而没有设置MEMORY_TARGET的值,则MEMORY_TARGET默认为0。

    4. 可通过v$memory_dynamic_components查看内存各组件的信息

    SQL> select component,current_size,min_size,max_size,user_specified_size from v$memory_dynamic_components;
    
    COMPONENT                      CURRENT_SIZE   MIN_SIZE     MAX_SIZE USER_SPECIFIED_SIZE
    ------------------------------ ------------ ----------   ---------- -------------------
    shared pool                        92274688   41943040     92274688                   0
    large pool                          8388608    8388608     71303168                   0
    java pool                           4194304    4194304      4194304                   0
    streams pool                              0          0            0                   0
    SGA Target                        205520896  205520896    205520896                   0
    DEFAULT buffer cache               92274688   37748736    100663296                   0
    KEEP buffer cache                         0         0             0                   0
    RECYCLE buffer cache                      0         0             0                   0
    DEFAULT 2K buffer cache                   0         0             0                   0
    DEFAULT 4K buffer cache                   0         0             0                   0
    DEFAULT 8K buffer cache                   0         0             0                   0
    
    COMPONENT                      CURRENT_SIZE   MIN_SIZE     MAX_SIZE  USER_SPECIFIED_SIZE
    ------------------------------ ------------ ----------   ----------  -------------------
    DEFAULT 16K buffer cache                  0          0            0                   0
    DEFAULT 32K buffer cache                  0          0            0                   0
    Shared IO Pool                            0          0            0                   0
    PGA Target                        109051904  109051904    109051904                   0
    ASM Buffer Cache                          0          0            0                   0
    
    16 rows selected.

    5. 如何启动Automatic Memory Management,设置如下:

    ALTER SYSTEM SET MEMORY_TARGET = nM;
    ALTER SYSTEM SET SGA_TARGET = 0;
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

    注意:如果SGA_TARGET和PGA_AGGREGATE_TARGET没有设置为0,则设置的值将是其最小值。

    SGA

    6. SGA各组件的分配以granule为单位,而granule的大小以SGA_MAX_SIZE为衡量标准,具体如下:

    关于granule的大小,可通过以下语句进行查询

    SQL> select * from v$sgainfo where name='Granule Size';
    
    NAME                                  BYTES RES
    -------------------------------- ---------- ---
    Granule Size                        4194304 No

    注意:SGA给各组件分配空间,都是granule的整数倍,譬如,如果你的granule size是4M,你将DB_CACHE_SIZE的值设置为10M,则SGA实际为DB_CACHE_SIZE分配的内存空间是12M。

    7. 关于SGA_MAX_SIZE

    SGA_MAX_SIZE是静态参数,具体说明和默认值如下所示:

    8. ASMM

    Automatic shared memory management通过设置SGA_TARGET的值来启动。在SGA各组件中,有些组件可通过ASMM自动分配内存,有些组件必须显性指定值。具体如下:

    Automatically Sized SGA Components and Corresponding Parameters

    以下参数SGA可自动调节,如果启动了ASMM,如下值必须设置为0,倘若不是0,则表示其最小值

    Manually Sized SGA Components that Use SGA_TARGET Space--以下参数只能手动配置内存

    9. 在实际应用中,SGA应该全部放在内存中,如果有一部分放在虚拟内存中,因为分页问题,则整个数据库的性能将受到显著影响。

    10. 如果要启动ASMM,如何确定SGA_TARGET的值?

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

    11. Buffer Cache

    Buffer cache的大小影响数据库的性能,较大的buffer cache虽然能减少物理读和写的次数,但由于它占用了大量的内存,可能会导致分页和交换。

    Oracle支持不同大小的block size,在创建表空间时,如果指定了非标准的block size,则必须设置相应的DB_nK_CACHE_SIZE的值。注意,system表空间使用的是标准块,标准块的大小可通过如下语句查看:

    SQL> show parameter db_block_size
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size                        integer     8192

    Oracle支持5种不同大小的block size,相应的cache值,可通过以下参数设置:

    DB_2K_CACHE_SIZE
    DB_4K_CACHE_SIZE
    DB_8K_CACHE_SIZE
    DB_16K_CACHE_SIZE
    DB_32K_CACHE_SIZE

    注意:DB_nK_CACHE_SIZE不能用于设定标准块的cache值,标准块的cache size是由db_cache_size决定的。在本例中,标准块的大小是8k,所以设置DB_8K_CACHE_SIZE的值将报以下错误:

    SQL> alter system set db_8k_cache_size=10m;
    alter system set db_8k_cache_size=10m
    *
    ERROR at line 1:
    ORA-32017: failure in updating SPFILE
    ORA-00380: cannot specify db_8k_cache_size since 8K is the standard block size

    32k的block size只在64位操作系统中有效。

    12. Buffer Pools

    buffer cache包含三种池:KEEP池、RECYCLE池、DEFAULT池。其中KEEP池是将对象的数据永久保存在内存中,RECYCLE池是一旦数据不需要,就从内存中剔除。DEFAULT池是默认的。KEEP池和RECYCLE池的大小分别根据DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE两个参数来设置。这三种池只支持标准块,对于非标准块,只支持DEFAULT池。

    13. 如果要手动管理PGA,需要显性设定以下值。

    SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 黑色星期五
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    控件动态产生器(使用RegisterClasses提前进行注册)
    Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
    Log4delphi使用心得
  • 原文地址:https://www.cnblogs.com/ivictor/p/4480905.html
Copyright © 2011-2022 走看看