zoukankan      html  css  js  c++  java
  • day08_SGA后半部分


    share_pool:用于缓存SQL语句以及SQL语句中涉及的表定义(数据列以及数据类型)

    查看共享池
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL;


    当执行一个sql语句,就会被记录,在生产平台上,很多sql语句会被很多人重复执行,所以,缓存了的sql语句,会被更快的执行
    SQL> select count(*) from dba_objects;

    SQL>  select sql_text from v$sqlarea where sql_text like '%dba_objects%';


    刷新(清空)share pool
    SQL> alter system flush shared_pool;

    再次查看之前的命令没有了
    select sql_text from v$sqlarea where sql_text like '%dba_objects%';


    SQL> show parameter shared_pool_size;

    ----------------------------------------------
    Database buffer cache(作用:缓存数据)
    Buffer cache存储从数据文件检索出来的数据块拷贝,提升数据检索速度,降低IO压力


    SQL> create table aa as select * from dba_objects;

    SQL> alter system flush shared_pool;
    SQL> alter system flush buffer_cache;

    打开自动跟踪
    SQL> set autotrace traceonly;

    SQL>select count(*) from aa;
    结果:
     5184  consistent gets (逻辑读 内存)
     914  physical reads   (物理读 硬盘)

    再次执行
    SQL> set autotrace traceonly;
    SQL>select count(*) from aa;
    结果:
           5047  consistent gets(只有逻辑读 说明都是从内存读出的)
              0  physical reads
    -----------------------------
    查看共享池
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL;
    SQL> show parameter shared_pool_size;

    SQL> alter system set shared_pool_size=64m scope=both;(此参数可以直接修改到内存和参数文件不需要重启)

    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL;
    SQL> show parameter shared_pool_size;

    你会发现share pool有2个不同值


    SQL> shutdown immediate;
    SQL> startup
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL;
    SQL> show parameter shared_pool_size;
    重启后,依然不会变化,share pool有2个不同值,所以咱们不用修改,10g以后是段自动管理,除非你把段自动管理关闭,它才会生效。

    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL;【以这个查询出的share pool为准】



    不管share pool、buffer cache全是在SGA中划分出来的,share pool、buffer cache受SGA管理,你开启自动管理功能不用手工设置,受SGA控制。
    SGA变大,share pool、buffer cache也会变大。SGA变小,share pool、buffer cache也会变小。


    显示SGA的所有设置值
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL
        union
        select name as pool,sum(bytes/1024/1024) from v$sgastat s where s.POOL is null group by s.name;


    SQL> show parameter sga;

    SGA是动态的并且最大值由SGA_MAX_SIZE参数控制【sga中划分的所有池,相加总和不可以超过sga_target。如果想把SGA中划分的各个池调大,由于SGA自动管理,SGA变大,这些划分的各个池也会变大】





    SQL> show parameter sga

    SGA大小受2个参数影响:sga_target、sga_max_size


    sga_max_size相当于你钱包里有多少钱,sga_target你要买的东西的价格
    你钱包里有1000元,你买双500元的鞋。你钱包里有1000元,你买1500元的鞋,买不了吧!

    在oracle运行过程当中修改SGA_TARGET值不能大于SGA_MAX_SIZE,生产中sga_target和sga_max_size大小致最好,就不会出问题了。
    就是你有1000元钱,你买双1000元的鞋,正好~!


    如果SGA_MAX_SIZE配置值小于SGA_TARGET,那么在数据库启动后SGA_MAX_SIZE= SGA_TARGET,在此期间SGA_TARGET不能向上调整
    你谈个女朋友,你钱包里有1000元,人家要1500元的包,你是不是也得买啊?哪怕你是借钱

    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL
        union
        select name as pool,sum(bytes/1024/1024) from v$sgastat s where s.POOL is null group by s.name;
    SQL> show parameter sga
    SQL> alter system set sga_max_size=350M scope=spfile;
    SQL> shutdown immediate;
    SQL> startup
    SQL> show parameter sga 【如果SGA_MAX_SIZE配置值大于SGA_TARGET,那么在数据库启动后SGA_MAX_SIZE, SGA_TARGET分别使用自己的配置值】
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL
        union
        select name as pool,sum(bytes/1024/1024) from v$sgastat s where s.POOL is null group by s.name;
        
      各个池没有变化,它们受sga_target影响,不受sga_max_size,上面咱们修改的是sga_max_size大小,所以各个池没有变化 
        
        
    SQL> alter system set sga_target=400M  scope=spfile;
    SQL> shutdown immediate;
    SQL> startup
    SQL> show parameter sga 【sga_max_size和sga_target一样了,sga_max_size迁就sga_target】    
    SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL
        union
        select name as pool,sum(bytes/1024/1024) from v$sgastat s where s.POOL is null group by s.name;   


    buffer cache和share pool有变化


    生产中最简单的调优方式,扩大内存吧,所以服务器内存没有小于16G。

    在oracle 10g后,SGA下的各个小池大小不需要咱们手工修改,你只需要会修改SGA,就可以了。





    scope=spfile【修改参数文件,当前没有生效,要重启】
    scope=both;【1修改到参数文件、2修改到内存当前生效】


    memory_max_size
    memory_target




  • 相关阅读:
    Oracle EXP
    Using Spring in Web and WinForms
    System.ComponentModel(未完...)
    工作必须得到强势方的支持!
    book.Save()还是bookManager.Save(book)?
    C#中常用的Attribute搜集(刚开始...)
    领域模型是否能够屏蔽数据库?
    合格代码的最基本的标准
    关于配置系统的设计
    对象分类
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/3f4741be0713899ee00e223e24efdede.html
Copyright © 2011-2022 走看看