WEB开发网
开发学院数据库Oracle Oracle内存结构中Process Memory分析 阅读

Oracle内存结构中Process Memory分析

 2007-05-12 12:25:11 来源:WEB开发网   
核心提示: 不管UGA是放在PGA中还是在SGA中,CGA都是PGA的一个子堆(Subheap),这个事实的一个重要推论是在一个调用的期间会话必须是一个进程,Oracle内存结构中Process Memory分析(3),对于在一个MTS的Oracle数据库进程应用开发时关于这一点的理解是很重要的,如果

不管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错误。

上一页  1 2 3 4  下一页

Tags:Oracle 内存 结构

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接