Oracle Database Administrator's Guide 11g---5.Manager Memory

      这篇文章主要是为了记下看过的Admin Guide中的重点,免得以后忘了,即为了忘却的记忆。所以很多细节方面都被忽略,基本概念也不再赘述。

     在11g里内存管理有2中,一种是自动内存管理,一种是手工内存管理。Oracle的内存结构如下:

                    Oracle内存结构

       

     1.启动自动内存管理:

     首先要知道即将管理的目标内存的大小,可以通过以下公式来计算:

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

     其中pga_aggregate_target参数是用来指定所有的 session总共可以使用的最大PGA内存; maximum PGA allocated 是数据库启动后所分配到的最大PGA内存。 pga_aggregate_target只是用户设置的一个目标,而maximum PGA allocated是已经分配的最大值, 但是不明白为什么可以使得maximun PGA allocated会大于pga_aggregate_target。貌似是在pga_aggregate_target达到后如果还允许用户连接,就可以超出这个值。

      之后设定MEMORY_TARGET 和 MEMORY_MAX_TARGET,可以用

        alter system MEMORY_MAX_TARGET = nM SCOPE = SPFILE

      因为MEMORY_MAX_TARGET不是动态的参数,所以要重启另它生效。重启后用下面的命令启动自动内存管理:

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

 

 

     2.手动内存管理:

     这里又分为自动管理SGA、手动管理SGA、自动管理PGA和手动管理PGA。

     1)可以通过以下命令从自动内存管理模式变到 自动管理SGA

         首先把MEMORY_TARGET变为0: ALTER SYSTEM SET MEMORY_TARGET = 0;

        

         之后计算SGA_TARGET的最小值:

             SGA_TARGET =  SELECT SUM(value) FROM V$SGA - SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY

         再设定SGA_MAX_TARGET的值,用下面的命令就可以实现自动管理SGA:

         ALTER SYSTEM SET SGA_TARGET = nM;
         ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
         ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
         ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
         ALTER SYSTEM SET DB_CACHE_SIZE = 0; (buffer cache size)

         ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;

 

         显然在Oracle里把某个参数的值设为零,表示它是自动计算的。

 

     2) 手动管理SGA

         要启动手动管理SGA, 要把MEMORY_TARGET设为0. SGA_TARGET设为0,再对SGA中的各个部分设值。

         设置Buffer Cache:

              单一的block size是通过设定DB_BLOCK_SIZE, 值是2~32k,再通过DB_CACHE_SIZE 参数设定buffer cache size。不同的block size可以通过DB_nk_CACHE_SIZE设定,表示nk的block size 对应的buffer cache size,例如:

               DB_BLOCK_SIZE=4096
               DB_CACHE_SIZE=1024M
               DB_2K_CACHE_SIZE=256M
               DB_8K_CACHE_SIZE=512M

              上面的命令指标准的block size 是4k, 4k block size的buffer cache size shi 1024M。 2k的是256M, 8k的是512 M。

              最后还可以设定多个buffer pool,这个还没搞懂,不写了。

 

            设置Shared Pool(共享池):

                  通过设置SHARD_POOL_SIZE参数控制大小,从10g开始这个值除了shared pool工作时内存大小,还包括SGA在启动的消耗(即在SGA启动时所需的内存也计算在SHARD_POOL_SIZE里)。共享池包含共享游标,存储过程,状态对象,字典缓存和诸如此类的其他大量数据结构。

 

             JAVA池:它是为数据库中运行的JVM分配的一个固定大小的内存。

 

             大池(Large Pool):共享服务器使用大池作为会话内存,并行执行特性使用大池作为消息缓冲区。

 

             流池(Stream Pool):是Oracle 流的一个专用共享内存池

 

             重做缓冲区(Redo Buffer):当数据需要写到在线重做日志中,在写入磁盘时需要把这些数据在重做缓冲区中临时缓冲,由于内存到内存的传输比内存到磁盘的传输快,所以重做日志缓冲区可以加快数据库的操作。

 

 

       3) 自动管理PGA

           Oracle会默认使用自动管理PGA,关键的一个参数是PGA_AGGREGATE_TARGET, Oracle会尽力保证所有的PGA内存消耗不超过这个值。 还要设置WORKAREA_SIZE_POLICY为AUTO.

 

       4) 手动管理PGA

           通过设置*_AREA_SIZE一系列参数,当然PGA_AGGREGATE_TARGET要设零。貌似这种模式比较麻烦,不建议初学者用。

 

      一些重要的View:

           V$SGA

           V$SGAINFO

           V$SGASTAT

           V$PAGSTAT

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值