龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

浅析Oracle中PGA和UGA两者间的区别(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
The CGA: 跟其它的全局区不同,Call Global Area是短暂性存在的。它只有在调用数据期间存在,一般是在对实例的最低级别的调用时才需要CGA,如下: 分析一个SQL语句

The CGA:

跟其它的全局区不同,Call Global Area是短暂性存在的。它只有在调用数据期间存在,一般是在对实例的最低级别的调用时才需要CGA,如下:
分析一个SQL语句;
执行一个SQL语句;
取出一个SELECT语句的输出。

一个单独的CGA在递归调用时是需要的。在SQL语句的分析过程中,对数据字典信息的递归调用是需要的,因为要对SQL语句进行语法分析,还有在语句的优化期间要计算执行计划。执行PL/SQL块时在处理SQL语句的执行时也是需要递归调用的,在DML语句的执行时要处理触发器执行也是需要递归调用的。

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

  1. 修改Oracle存 储过程所需代码
  2. 对Oracle存储过程的总结
  3. 实现Oracle存 储过程的实际应用的代码 
  4. 深入高性能的 Oracle动态SQL开发 
  5. Oracle SQL的 优化规则解析 
精彩图集

赞助商链接