您的位置:首页 > 数据库 > Oracle

Oracle 10g 内存结构体系学习总结

2008-08-04 17:43 337 查看
学习了近5个月的Oracle 10g,对其体系机构有了一个大体的认识,这次对其内存体系机构作个总结:

1,Sga :系统全局区

2,pga: 进程全局区

3,Uga:用户全局区(是共享服务器,uga在sga中分配,是专有服务器,uga在pga分配)

这里主要讨论sga和pga:

目前在Oracle 10g中有手动和自动内存管理,自动内存管理和SQL SERVER 类似,自己来管理和分配内存。pga是内存的一个“堆”;

PGA(进程全局区)

我们先看看手动PGA管理:有以下参数

1,SOrt_AREA_SIZE: 信息换出磁盘之前,用于内存中排序的总量(对与合并联结算法适用)

2,SOrt_AREA_RETAINED_SIZE: 排序完成后,保存已经排序的数据的内存总量

3,HASH_AREA_SIZE; 在内存中散列表使用的内存量(用于Hash联结时,小表在内存中生成的数据)

上面这几个参数,是对一个session中设置的。一般就是几M大小左右,如果太大了,服务器内存也不够啊,想想几千人吧,那数据就是多少个G了。

这些参数,就是控制排序和hash所用的内存量,都是设置的上限。

如果这些数据设置得太小,数据库就会将数据写的临时表里存储起来。一般设置手动pga设置比较麻烦,oracle现在可以实现了自动PGA管理。

在Oracle中设置pga的管理方式:

WorkArea_Size_Policy:

设置为manual为手动pga管理

设置为Auto为自动pga管理,10g以上是默认Auto管理

当WorkArea_Size_Policy=Auto时,必须设置pga_aggregate_target的值大小

pga_aggregate_target: 是排序和hash联结的所有使用的总内存大小;

SGA(系统全局区)

一般dba是通过配置(缓存区缓存,日志缓存,共享池,大池和Java池)来微调系统的。

日志缓存:

又叫重做日志缓存区:是将数据写到在线重做日志当中,则在写到磁盘前要在”重做缓存区“中临时缓存一些数据。

数据不会在“重做缓存区”里停留很长时间,LGWR会在以下情况下触发:

1,每3秒一次

2,无论何时提交请求

3,LGWR切换日志时

4,重做日志区1/3满时,或者包含了1M日志数据时。

一般重做事务日志就几M,超过了3M就没意义了。

缓存区缓存:

就是“数据缓存”,太小,查询执行不完,太大,其他进程就缺少内存。

分3个位置:

”default 默认池“ :默认数据都放在这个池中缓存,如果有些数据长期不用,数据会被踢出缓存。

“keep 保存池 ”:一般将访问比较频繁的数据放在这个池中。此池的数据一直保存(除非其他段要数据),数据不会被踢出

”Recycle 回收池“:是将不适合缓存的数据放在这个池中,以免因为这个数据比较大,将其他池的数据踢出缓存。

回收池要小一些,以保证大的数据快速进入和离开缓存。

共享池

设计共享池为了反复使用执行计划。数据字典缓存,系统参数

运行的PL/SQL代码就在共享池里缓存,一般此池不会很大,一般也就300-500M就可以了。

大池

因为它用于“大块”内存的分配,共享池不会处理如此大的内存。一般主要用于备份。

JAVA池

支持数据库中的java代码。一般比较小

流池

设计数据库的共享和复制,设计流池可以避免在流数据库特性下”窃取“共享池10%的空间

自动设置SGA的大小:

通过设置Sga_Target来配置大小,这样数据库可以动态调整数据各个池的大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: