转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
Process Memory的详细信息 (二)         ★★★★

Process Memory的详细信息 (二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:842 更新时间:2009/4/22 22:03:14

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.

 

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错误.

  ORA-4030这个错误的产生一般不是因为每个进程的资源限制而是因为SWAP SPACE空间不足造成.为了诊断这个问题可以使用操作系统的一些选项来查看SWAP SPACE的使用情况.另外,在一些操作系统中,Oracle包含了一个工具叫maxmem,它可以用来查看每个进程可以被分配的堆数据段的最大SIZE以及哪一个限制是第一次超过的.

  如果这个问题的出现是因为SWAP SPACE空间不足,而且换页的动作非常频繁而且较多,则需要减少系统一级的虚拟内存的使用,这个可以通过减少进程数也可以通过减少每个进程的内存限制.如果换页动作不频繁而且比较少,则需要调大SWAP SPACE SIZE.

Process Memory Deallocation:

  Oracle堆的增长比它们的收缩要来得容易,当然它们的SIZE也是可以收缩的.在V$MYSTAT和V$SESSTAT视图中,session的统计信息session uga memory和session pga memory分别显示了当前session的UGA和PGA的内存大小,包含内部的空闲空间.相应的统计信息session uga memory max 和 session pga memory max分别显示了在session的生存期间所使用过得最大的UGA和最大的PGA.

  UGA和PGA只有在特定的操作后才会收缩,这些操作如一次磁盘排序的合并操作,或者用程序DBMS_SESSION.FREE_UNUSED_USER_MEMORY显示释放内存.只有整个free heap extent会被释放给父堆或者是进程堆数据段,所以有一部分的内部free space在内存释放后仍然存在于subheap中.在大多的操作系统环境下,Oracle是不会减少进程堆数据段也不会释放虚拟内存并将其返还给操作系统的.所以从一个操作系统的查看中,一个Oracle的进程将会把虚拟内存SIZE作为HWM而保留着.如果有必要时,Oracle是会将一些没用的虚拟内存页换页出去的.因为这个原因,有关Oracle进程的虚拟内存页的操作系统统计信息都是很难理解的.所以一般用的是Oracle内部统计信息来代替使用操作系统的统计信息.

  程序DBMS_SESSION.FREE_UNUSED_USER_MEMORY只能在连接是配置为MTS模式的应用才能使用.这个最好是少点使用,因为它只释放大的包的array变量所占用的内存返还给Large Pool或者是Shared Pool.一般地,UGA HEAP的内存应该首先被释放,可以通过指派新的空array给array变量使用,也可以通过调用程序DBMS_SESSION.RESET_PACKAGE.


[Delphi程序]Wide Band Delphi Estimation Process  [ORACLE]Process Memory的详细信息 (一)
[ORACLE]获得Oracle各内存段的内部信息 (二)  [ORACLE]解读Oracle 9201的控制文件 (二)
[ORACLE]Oracle操作相关 (二)  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台