一个oracle实例就一个SGA,PGA则不同,每一个后台进程,都有一个PGA。

1. SGA的组成部分:

  • shared pool(共享池)
  • database buffer cache(数据块缓存区)
  • redo log buffer
  • other structures(such as lock and latch management,statistical data)   

     SGA中除此之外还有两个可选项:large pool和java pool;随着版本的不同会有所不同,核心内容不变。

 

2. SGA的一些特性:

  • SGA是动态的,9i版本之前是固定不变的,也就是说oracle启动之后,SGA的大小就不能调整了;
  • 参数 SGA_MAX_SIZE决定SGA的最大值;

  • granules 是SGA分配内存的基本单位 查看granules 的语句(select component,granule_size from v$sga_dynamic_components);

 

3. shared pool(共享池)

  (1)主要用来存储:

  • 最近执行的sql语句
  • 最近使用的数据定义

  (2)包含两块共享内存,这两部分内存事关数据库的性能:

  •  library cache
  •  data dictionary cache

  (3)共享池可以使用参数SHARED_POOL_SIZE更改大小,用法:alter system set shared_pool_size=64M;

 

  (4)library cache (共享池的组成部分)

    library cache存储经过编译解析后的最近使用的sql和plsql语句,因此主要包括两部分:shared sql area和shared plsql area(当然也包括别的,这里说的是主要部分)。library cache的大小将影响oracle的性能,它的大小由共享池决定。

 

  (5)data dictionary cache(数据字典也是共享池的组成部分)

    存储着数据库控制信息的信息,包括数据文件的信息、表的信息、索引、用户、权限信息以及其他的数据库对象信息;数据字典使用非常频繁。它的大小也是由共享池决定的。

 

4. database buffer cache

      这块内存结构是最大的也是最重要的,主要是用来存储真正的数据文件(以block的形式进行存储);它的目的就是提供性能(通过提高命中率);参数DB_BLOCK_SIZE决定块的大小;

     动态的改变cache大小的参数是DB_CACHE_SIZE(alter system set DB_CACHE_SIZE=96M);

 

5. redo log buffer

     主要用于恢复的;存储着所有数据块的改变信息;

     每对数据做一次改变,在redo log就会有相应的一条记录,称为redo entries ,一条redo entries 就可以恢复一次对数据库的改变;redo log buffer的大小由参数LOG_BUFFER决定。

6. large pool(可选项)

7. java pool(可选项)

 

 

 

 

 

   

posted on 2011-12-13 17:31  龟壳里的蜗牛  阅读(663)  评论(0编辑  收藏  举报