Bootstrap

oracle内存结构


1.实例与数据库
>实例instance:
    *数据库启动后内存中的映像(副本),管理数据库正常运行;
    *组成:(system global area + background process);
    *在OS中以ORACLE_SID标识,在DB中以instance_name标识;
    *查看实例名:
        $ set | grep ORACLE_SID
        $ ipcs -m |grep oracle
        $ ps -ef|grep ora_
      SQL> show parameter instance_name;
>数据库database:
    *实例所存取的一个文件的集合;
    *组成:(初始文件,控制文件,数据文件,日志文件等);
    *在DB中以db_name标识;
    *查看数据库名:
        SQL> show parameter db_name;
>实例与数据库的关系:
    *一个实例对应一个数据库
        单点数据库:单个实例存取一组数据库文件。(通常情况)
*多个实例对应一个数据库
    多点数据库:多个数据库存取一组数据文件。(OPS&RAC)
2.SGA(system global area)
SGA是一组包含一个ORACLE实例的数据和控制信息的共享内存结构。
*是为oracle系统分配的共享内存;
*是实例的主要组成部分;
*是影响数据库性能最主要的因素;
*随实例启动/关闭而被分配/回收;
*SGA自动对所包含的各种缓存自动进行动态管理;
>SGA主要包含5类缓存:
    (1)db_buffer_cache    数据高速缓存
    (2)shared_pool            共享池
    (3)large_pool            大池
    (4)java_pool                java池
(5)redo_log_buffer    重做日志文件缓冲(不参与动态管理)
>查看SGA
    SQL> show sga;
    SQL> select *  from v$sga;
>查看SGA重要参数:
    SQL> show parameter sga;

NAME                               TYPE        VALUE
------------------------------------ -----------
lock_sga                             boolean     FALSE
pre_page_sga                        boolean     FALSE
sga_max_size                        big integer  524M
sga_target                           big integer  496M
*pre_paga_sga
    启动时是否将全部SGA区都绑定到物理内存,而不使用交换分区。(非动态生效)
    SQL> alter system set pre_page_sga=true scope=spfile;
    SQL> shutdown immediate;
    SQL> startup
    SQL>show parameter pre_page_sga;
*lock_sga
    运行过程中是否也将全部的SGA区绑定到物理内存,而不使用交换分区。(Linux/win平台不适用)。
    SQL> show parameter lock_sga;
    如果要在Liunx中使用,请在OS中使用如下命令
        # ulimit -l unlimited
    且需要以root的身份执行    
*sga_max_size    sga区总大小上限值
SQL> alter system set sga_max_size=522M scope=spfile;
SQL> shutdown immediate;
SQL> startup
SQL> show parameter sga_max_size;非动态生效
    # sysctl  -a | grep shmmax 查看shmmax值,可以看到此处sga_max_size值超过该值。sga_max_size能由若干个shmmax的值。
    注:sga_max_size可以改大,改小则受到sga_target的限制,不小于sga_target的值。
    sga内存按照颗粒大小granule_size分配内存,若手工分配内存大小的非整数倍于granule_size,则自动凑为granule_size的整数倍大小,常见的granule_size如下:
    若SGA<1,granule_size=4M
    若SGA>1,granule_size=8M (  for win),
granule_size=16M(for other)
    SQL> select bytes from v$sgainfo where name='Granule Size';查询sga颗粒的大小。
*sga_target
    启动自动共享内存管理ASMM(automatic shared memory managerment)机制,由mman(memory manager)后台进程动态管理SGA中的各项缓存(redo_log_buffer为非动态管理),若值为0表示未启用ASMM,其值应尽量的接近sga_max_size。当sga_target小于sga_max_size时,SGA中各项缓存合计值以sga_target 为实际上限。
SQL> show parameter db_cache_size;
SQL> show parameter shared_pool_size;
SQL> show parameter large_pool_size;
SQL> show parameter java_pool;
    调整sga_target前,应先查看四项缓冲的默认设置值,默认为0,表示可由ASMM在0到sga_target所规定的值区间内任意的自动调整各缓冲大小。若一项缓冲设置不为0而为一具体的值,代表ASMM在动态调整各缓存区时,该缓冲区不能分配低于该指定值的大小。
                                                                                                                                    未完待续......

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27634619/viewspace-741945/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27634619/viewspace-741945/

;