Oracle 10g内存结构体系学习总结
2008-08-26 12:44:06 来源:WEB开发网学习了近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来配置大小,这样数据库可以动态调整数据各个池的大小。
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接