关于oracle内存的相关知识(about oracle memory control)

这几天一直在整理oracle内存的一些知识,整理出来大家共享一下。

oralce有3种内存结构。

PGA(Process Global Area)
SGA(System Global Area)
UGA(User Global Area)

1) PGA(Process Global Area)
当建立新的进程或线程的时候,就会分配这个PGA,他并不占用SGA的任何空间。而且它是不共享的。
9i时代以后它有两种管理方式。
手动管理和自动管理。

PGA手动管理:这里有几个很关键的参数来控制。
SORT_AREA_SIZE:写入磁盘前对信息排序的RAM量。是一个上限值。
SORT_AREA_RETAINED_SIZE:排序后保存已排序数据的内存总量。已排序数据装不下会放入临时表空间。是一个上限值。
HASH_AREA_SIZE:存散列表的内存量。

PGA自动管理:可以不用理上面的那个几个参数了,这里有两个参数设置一下就可以了。
WORKAREA_SIZE_POLICY:选AUTO就是自动管理,选MANUAL是手动管理。
PGA_AGGREGATE_TARGET:PGA可用的最大内存量,但不是绝对。PGA有可能会超过这个数值。这个值不会马上在内存中分配。

当WORKAREA_SIZE_POLICY设置为AUTO,并且PGA_AGGREGATE_TARGET为非0,则说明启用了PGA内存自动管理。
如果使用手动管理,必须要随时监控连接数量,当连接数很大并且SORT_AREA_SIZE也很大的时候会导致内存不够用,如果SORT_AREA_SIZE值设为很小而连接数又变少的时候又会浪费资源。所以ORACLE非常推荐使用自动管理。

11g以后进入了自动内存管理以后可以和SGA一起分配内存量,这个在SGA的内容中说明。

2) SGA(System Global Area)
SGA是oracle非常重要的组成部分,它的大小一旦设定,oracle启动之后将会对这部分内存独占。也就是系统不可以使用这部分资源了。
你可以通过startup启动数据库的时候和show parameter sga又或者v$sgastat试图等方法来看它的大小。
SGA有几大pool。

large pool: 大池。使用大块内存的时候利用。主要为当有共享服务器连接的时候会用大池来做会话内存。语句并行执行的时候会在这里缓存。RMAN备份也会用到这个池作为I/O磁盘缓冲。它可以在线调整大小。
shared pool: 共享池。共享游标,存储过程,状态对象,字典缓存等大量数据的共享内存。可以在线调整大小。这是sga中最重要的池之一。特别对性能和扩展性有很大影响。设置过大过小都会对性能有影响。SQL解析的结果都会缓存在这里。
java pool:运行JVM时要利用的内存。可以在线调整大小。
steam pool:流池。Oracle利用流的时候要利用的内存。可以在线调整大小。
redo log buffer:重做日志缓冲区。数据写到重做日志之前需要在这里临时缓冲。
fixed SGA:固定SGA。是SGA一个组件。通常SGA通过它来寻找其他的区。

9i时代,
这些组成部分的大小都要自己设置。
LARGE_POOL_SIZE:控制大池的大小。
SHARED_POOL_SIZE:控制共享池的大小。
JAVA_POOL_SIZE:控制java池的大小。
DB_*_CACHE_SIZE:控制缓冲区缓存大小。
SGA_MAX_SIZE:SGA可以达到的最大内存量。
LOG_BUFFER:控制重做缓冲区大小。

内存设置的单位叫granule,为4MB,8MB,16MB。

10g时代
引入了自动SGA内存管理。
只需要设置SGA_TARGET的大小,DB_CHACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE的大小不需要设置,它们将由oracle自行来分配。SGA_TARGET最大可利用值是由SGA_MAX_TARGET来限制。
而log_buffer,streams_pool,DB_*_CACHE_SIZE还是需要手动来设定。

如果不知道现在那些能调节大小,可以用这个语句查看-》select * from v$SGAINFO;

11g时代
进一步为自动内存管理。
当MEMORY_TARGET为非0的时候,则启动了自动内存管理。
只需要设置MEMORY_TARGET的大小,它将会自动调整SGA_TARGET和PGA_AGGREGATE_TARGET的大小。

UGA(User Global Area)
当产生会话的时候,这个会话就能利用这个内存。它并不是一个独立的内存空间。它与连接方式有关。
当连接方式为专用服务器连接,UGA会在PGA中分配内存。当连接方式为共享服务器连接,UGA会在SGA中分配内存。
专用服务器连接的时候,基本上UGA就等同于PGA。共享服务器连接的时候UGA会在large pool中分配空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值