程序全局区(PGA)

  程序全局区或进程全局区(PGA)是内存区,它包含有关单个服务器进程或单个后台进程的数据和控制信息。PGA在创建进程时分配,并在终止进程时回收。与由若干个进程共享的SGA相比,PGA是仅供一个进程使用的区。

PGA的内容:

  PGA内存的内容会因不同情况而变化,这取决于例程是在专用服务器配置还是在共享服务器配置下运行。一般来讲,PGA内存包括下列组件:

  ·专用SQL区:包含绑定信息和运行时内存结构之类的数据。发出SQL语句的每个会话均拥有一个专用SQL区。提交同一SQL语句的每个用户都拥有自己的使用单个共享SQL区的专用SQL区。因此,许多专用SQL区都与同一个共享SQL区相关联。一个游标的专用SQL区可以分成以下两个区:

    — 永久区:包含绑定信息,并且只在关闭游标时释放

    — 运行时区:在执行请求时的第一步创建。对于INSER、UPDATE和DELETE命令,该区在执行语句后释放,对于查询操作,该区只在提取所有行或取消查询后释放。

  专用SQL区的位置取决于为会话建立的连接。在专用服务器环境中,专用SQL区位于各自服务器进程的PGA中。在共享服务器环境中,专用SQL区位于SGA中。

  管理专用SQL区是用户进程的职责。用户进程可以分配的专用SQL区的数目始终由初始化参数OPEN_CURSORS来限制。

  ·会话内存:包含为保留会话变量以及与该会话相关的其他信息而分配的内存。对于共享服务器环境,该会话是共享的而不是专用的。

  ·SQL工作区:用于大量占用内存的操作,如排序、散列联接、位图合并和位图创建。工作区的大小可进行控制和调整。

  自oracle9i起,工作区的大小可以经行自动的全局管理。要实现这种功能,可将WORKARE_SIZE_POLICY参数设置成缺省情况下的AUTO,同时设置PGA_AGGREGATE_TARGET初始化参数。DBA可以对PGA_AGGREGATE_TARGET参数进行设置,以指定该例程可以使用的PGA内存的目标聚集数目。此参数只是一个指标,可以由DBA在例程一级动态修改。设置值的单位可以是字节数、千字节数、兆字节数或吉字节数。设置完这些参数后,工作区的大小即可自动调整,这些会话将忽略所有的*_AREA_SIZE参数。

  在oracle9i之前的版本中,由DBA控制着SQL工作区的最大大小,方法是设置以下参数:SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE和CREATE_BITMAP_AREA_SIZE。设置致谢参数是很困难的,因为工作区的最大大小在理论上是基于输入的数据大小以及系统中活动工作区的数目来选择的。但是,以上两种因素在不同工作区和不同时间差别很大。因此,很难再最佳环境下调整这些参数。

posted @ 2011-07-08 14:55  leanman  阅读(1733)  评论(0编辑  收藏  举报