• SGA内存的优化


    查看SGA有关的系统参数即介绍

    SQL> show parameter sga
     
    NAME                                 TYPE        VALUE   
    ------------------------------------ ----------- ------------------------------
    lock_sga                             boolean     FALSE   该参数被设为true时,整个SGA将会被锁定在物理内存中,可避免部分SGA分配到到虚拟磁盘中,可以提高效率。该参数是静态的
    pre_page_sga                         boolean     FALSE   设为true时,整个SGA会被读入到物理内存中,增加了所需要的物理内存和实例启动时间,但会提高系统的效率。该参数是静态的。
    sga_max_size                         big integer 1600M   所有内存缓冲区的总和不能超过这一参数所定义的值,该参数是静态的,即修改spfile中该参数的值,需要重启数据库才能生效。
    sga_target                           big integer 0       主管SGA的自动管理,Oracle称之为自动共享内存管理,ASMM
    查看重做日志缓冲区的大小
    在DML很频繁的事物处理数据库系统时,可能就需要修改该参数的值。
    SQL> show parameter log_buffer
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_buffer                           integer     6782976     单位是字节

    调整log_buffer为10M,然后重启数据库生效。

    SQL> select 10*1024*1024  from dual;
     
    10*1024*1024
    ------------
        10485760
     
    SQL> alter system set log_buffer = 10485760 scope = spfile;        --该参数只接受字节单位
     
    System altered

    调整sga_max_size,lock_sga,pre_page_sga的值。

    SQL> alter system set sga_max_size = 4G scope=spfile;
    SQL> alter system set lock_sga = true scope = spfile;
    SQL> alter system set pre_page_sga = true scope = spfile;

     注意:这四个静态参数修改一定的加上scope = spfile,并且需要重启才能生效。

    使用ASSM功能

    怎么才能使用ASSM功能呢? sga_target为非零的值,并且statistics_level的值为TYPICAL或者ALL。

    SQL> alter system set sga_target = 512M;     ---调整sga_target的大小
     
    System altered
     
    SQL> show parameter statistics_level         --查看值,默认是TYPICAL
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    statistics_level                     string      TYPICAL
    

    启用ASMM后内存缓冲区的大小将由Oracle自动进行管理,例如下面的参数:db_cache_size,java_pool_size ,shared_pool_size,并接他们的值自动设置为零。

    重启后发现错误

    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORA-00844: Parameter not taking MEMORY_TARGET into account
    ORA-00851: SGA_MAX_SIZE 4294967296 cannot be set to more than MEMORY_TARGET 1677721600.

    查阅资料得知:memory_target 是oracle11g用于自动内存管理的,它与memory_max_target是成对出现的,是11g内存管理上的新特 性,这一特性的出现使得 pga+sga做为整体内存使用被一致的纳入自动管理范畴。简而言之memory_target就是整个实例所能使用的内存大小, 包括PGA和SGA的 整体大小,在MEMORY_TARGET的内存大小之内,PGA和SGA所用的内存可以根据当前负载情况自动相互转换。 

    如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参 数 MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节MEMORY_TARGET的大小,但是不允许超过 MEMORY_MAX_TARGET的值。  

    由此可见sga的尺寸是不能大于memory_target的。所以我们要调整memory_target和memory_max_target的值高于sga_max_size。

    下面是解决改错误的方法:
    1. create pfile='D: emppfile20150115.txt' from spfile;

    2.修改pfile20150115.txt中的memory_target=1669332992成memory_target=5368709120。

    3.在D:appzyproduct11.2.0dbhome_1database下找到SPFILEMYDEV.ORA,并将其备份成SPFILEMYDEV.ORA20160402.

    4.创建新的动态参数文件: SQL>  create spfile from pfile='D: emppfile20150115.txt';

    5.启动数据库,OK,问题得到解决。

    再次启动又出现报错:
    SQL> startup
    ORA-00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together

    原来是lock_sga把整个内存锁住,如果memory_target和memory_max_target都设置了,锁定哪个值呢?所以只能有一个,回过头再把spfile中的lock_sga给关掉。

    SQL> show parameter sga
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    lock_sga                             boolean     FALSE
    pre_page_sga                         boolean     TRUE
    sga_max_size                         big integer 4G
    sga_target                           big integer 512M
    总结一下,以后调整sga的顺序是,先调整tmpfs的大小,再调整MEMORY_TARGET 的大小,最后调整sga,保证tmpfs>MEMORY_TARGET >sga+pga

  • 相关阅读:
    iOS Xcode制作模板类
    图片变形的抗锯齿处理方法
    iOS 9 分屏多任务:入门(中文版)
    iOS应用国际化教程(2014版)
    GitHub Top 100 简介
    iOS @synthesize var = _var 变量前置下划线解释
    @synthesize obj=_obj的意义详解 @property和@synthesize
    git 教程(14)--解决冲突
    git 教程(13)--创建与合并分支
    C++基础知识(3)---new 和 delete
  • 原文地址:https://www.cnblogs.com/zydev/p/5346839.html
Copyright © 2020-2023  润新知