Oracle 10G数据库自动内存管理分析

http://tech.ddvip.com   2007年05月12日    社区交流

本文详细介绍Oracle 10G数据库自动内存管理分析

  SQL> select current_size from v$buffer_pool;
  
  CURRENT_SIZE
  ------------
  244
  
  SQL> select pool, sum(bytes)/1024/1024
  Mbytes from v$sgastat group by pool;
  
  POOL       MBYTES
  ------------ ----------
  java pool       4
  large pool      4
  shared pool     44

  占用的总大小是 240+4+4+44 = 296MB,接近于目标的 300MB。注意如图 2 所示,当 SGA_TARGET 改变时,如何自动重新分配池。

  图 2:在将 SGA 大小减少到 300MB 之后重新分配池

  这些池的大小是动态的。池将根据工作负载扩展,以容纳需求的增长,或缩小以容纳另一个池的扩展。这种扩展或缩小自动发生,无需 DBA 的干预,这与本文开头的示例不同。让我们暂时返回到那个场景,假定在初始分配后,RMAN 作业启动,指示需要一个更大的大型池,大型池将从 4MB 扩展到 40MB,以容纳需求。这个额外的 36MB 将从数据库缓冲中划出,数据库块缓冲将缩小,如图 3 所示。

  图 3:在对大型池的需求增长之后经过重新分配的池

  池的大小变化基于系统上的工作负载,因此不需要为最坏的情况调整池的大小 — 它们将根据需求的增长自动调整。此外,SGA 的总大小始终在由 SGA_TARGET 指定的最大值之内,因此不存在使内存需求的增长比例失调(这将导致分页和交换)的风险。您可以动态地将 SGA_TARGET 增加至绝对最大值,这个绝对最大值是通过调整参数 SGA_MAX_SIZE 指定的。

责编:豆豆技术应用

正在加载评论...