Oracle内存结构中Process Memory分析
2007-05-12 12:25:11 来源:WEB开发网不管UGA是放在PGA中还是在SGA中,CGA都是PGA的一个子堆(Subheap)。这个事实的一个重要推论是在一个调用的期间会话必须是一个进程。对于在一个MTS的Oracle数据库进程应用开发时关于这一点的理解是很重要的。如果相应的调用较多,就得增加processes的数量以适应调用的增加。
没有CGA中的数据结构,CALLS是没法工作的。而实际上跟一次CALL相关的数据结构一般都是放在UGA中,如SQL AREA,PL/SQL AREA和SORT AREA它们都必须在UGA中,因为它们要在各CALLS之间要一直存在并且可用。而CGA中所包含的数据结构是要在一次CALL结束后能够释放的。例如CGA包含了关于递归调用的信息,直接I/O BUFFER等还有其它的一些临时性的数据结构。
Java Call Memory也是在CGA中。这一段内存比Oracle的其它内存段管理得更密集。它分成三个Space: Stack Space, New Space, Old Space。在New Space和Old Space中不再被参考使用的Chunks,根据它们在使用期间的长度及SIZE的不同,在调用的执行过程中将被当成不用的Chunks收集起来。New Space Chunks很多次的不用的Chunks的反复收集过程中没有被收集的Chunks将会被放到Old Space Chunks中。这是在Oracle内存管理中唯一的一个废物收集(garbage collection),其它的Oracle内存段都是释放Dead Chunks。
Process Memory Allocation
跟SGA不一样的是,SGA在实例启动之后SIZE就已经是定下来的,而PGA的SIZE是会增长的。通过使用malloc()或者sbrk()系统调用来为进程增加堆数据段大小而使得PGA的SIZE的增长。OS的新虚拟内存会被做为PGA HEAP中的一个新的区被加到PGA中来。这些区一般只几KB大,如果有需要,Oracle将会给分配上千个区。
操作系统对每个进程的堆数据段的增长是有限制的。大部分的情况是操作系统的内存参数进行限制(kernel parameter: MAXDSIZ),有一些情况它的缺省值是可以以每个进程为基准进行修改的。对于所有的进程,操作系统对整个虚拟内存也有一个系统全局性的限制,这个限制跟系统的SWAP SPACE相关。一旦超过了这两个限制,Oracle的进程在执行中会遇到ORA-4030错误。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接