作为一个复杂的Oracle数据库系统来说,每时每刻都要处理不同用户所提交的SQL语句,获取数据并返回数据给用户。前面已经说到,解析SQL语句的工作是在Oracle实例中的shared pool所完成的。那么对于每个session来说,其执行SQL语句时所传入的绑定变量放在哪里?而且,对于那些需要执行比较复杂SQL的session来说,比如需要进行排序(sort)或hash连接(hash-join)时,这时,这些session所需要的内存空间又从哪里来?另外,还有与每个session相关的一些管理控制信息又放在哪里?对于诸如此类与每个session相关的一些内存的分配问题,Oracle通过引入PGA这个内存组件来进行解决。

1、PGA的概念及其包含的内存结构

PGA按照Oracle官方文档解释,叫做程序全局区(Program Global Area),但也有些资料上说还可以理解为进程全局区(Process Global Area)。这两者没有本质的区别,它首先是一个内存区域,其次,该区域中包含了与某个特定服务器进程相关的数据和控制信息。每个进程都具有自己私有的PGA区,这也就意味着,这块区域只能被其所属的进程进入,而不能被其他进程访问,所以在PGA中不需要latch这样的内存结构来保护其中的信息。

笼统地说,PGA里包含了当前进程所使用的有关操作系统资源的信息(比如打开的文件句柄等)以及一些与当前进程相关的一些私有的状态信息。每个PGA区都包含以下两部分。

固定PGA部分(Fixed PGA):这部分包含一些小的固定尺寸的变量,以及指向变化PGA部分的指针。

变化PGA部分(Variable PGA):这部分是按照堆(Heap)来进行组织的,所以这部分也叫做PGA堆。PGA堆中所包含的内存结构包括:

有关一些固定表的永久性内存。

如果session使用的是专用连接方式(dedicated server),则还含有用户全局区(User Global Area,UGA)子堆。如果session使用的是共享连接方式(shared server),则UGA位于SGA中。UGA是PGA中的最重要的部分。

调用全局区(Call Global Area,CGA)子堆。

UGA是包含与某个特定session相关信息的内存区域,比如session的登录信息以及session私有的SQL区域等。每个UGA也包含以下两个部分。

固定UGA部分(Fixed UGA):这部分包含一些小的固定尺寸的变量,以及指向变化UGA部分的指针。

变化UGA部分(Variable UGA):这部分也是按照堆来进行组织的,可以从X$KSMUP视图中看到有关UGA堆的分布情况。UGA堆的分布与open_cursors、open_links等参数有关系。所谓的游标(cursor)就是放在这里的,游标指向shared pool里的包含SQL文本以及执行计划等的对象。UGA堆中所包含的内存结构介绍如下。

私有SQL区域(Private SQL Area):这部分区域包含绑定变量信息以及运行时的内存结构等数据。每一个发出SQL语句的session都有自己的私有SQL区域。这部分区域又可分成以下两部分。

永久内存区域:这里存放了相同SQL语句多次执行时都需要的一些游标信息,比如绑定变量信息、数据类型转换信息等。这部分内存只有在游标被关闭时才会被释放。

运行时区域:在处理SQL语句时的第一步就是要创建运行时区域,这里存放了当SQL语句运行时所使用的一些信息。对于DML(INSERT、UPDATE、DELETE)语句来说,SQL语句执行完毕就释放该区域;而对于查询语句(SELECT)来说,则是在所有数据行都被获取并传递给用户以后被释放,或者该查询被取消以后也会被释放。

Session相关的信息。这部分信息包括以下几部分。

正在使用的包(package)的状态信息。

使用alter session这样的命令所启用的跟踪信息,或者所修改的session级别的优化器参数(optimizer_mode)、排序参数(sort_area_size等)、修改的NLS参数等。

所打开的db links。

可使用的角色(roles)等。

工作区(Work area):这块区域主要用来存放执行SQL的过程中所产生的中间数据,比如排序时,需要在这里存放排序过程中的中间数据。这部分占据了PGA中的大部分空间。其大小依赖于所要处理的SQL语句的复杂程度而定。如果SQL语句包含诸如group by、hash-join等这样的操作,则会需要很大的SQL工作区域。实际上,我们调整PGA也就是调整这块区域。

而UGA所处的位置完全由session连接的方式决定:

如果session是通过共享服务器(shared server)方式登录到数据库的,则毫无疑问,UGA必须能够被所有进程访问,所以在这种情况下,UGA是从SGA中进行分配的。进一步说,如果SGA中设置了large pool,则UGA从large pool里进行分配;否则,如果没有设置large pool,则UGA只能从shared pool里进行分配。

如果session是通过专用服务器(dedicated server)方式登录到数据库的,则UGA是从进程的PGA中进行分配的。

oracle系统pga,oracle教程之PGA管理相关推荐

  1. oracle系统user$,Oracle 系统变量函数介绍

    Oracle函数多种多样,系统变量函数就是其中之一,下面就为您介绍三种最常见的系统变量函数,希望对您学习Oracle能有所帮助. Oracle系统变量函数: (1)SYSDATE 该函数返回当前的日期 ...

  2. oracle 远程访问配置,C#教程之Oracle 远程访问配置

    服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 # listener.ora N ...

  3. 查找oracle系统密码,oracle密码忘记怎么办?

    oracle密码忘记的解决办法:首先登录到安装oracle数据库服务器的操作系统:然后查找环境变量[ORACLE_SID]的设置:最后输入命令[sqlplus/as sysdba],以sysdba的身 ...

  4. 退出oracle系统,配置Oracle随系统启动和关闭

    1.修改/etc/oratab文件 将需要随操作系统自启动的数据库由N修改为Y lis:/u01/app/Oracle/product/11.2.0/db_1:N 修改为: lis:/u01/app/ ...

  5. 经典:uC/OS-II系统的学习教程之(2)

    实时系统概念  实时系统的特点是,如果逻辑和时序出现偏差将会引起严重后果的系统.有两种类型的实时系统:软实时系统和硬实时系统.在软实时系统中系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必 ...

  6. oracle dba_seg,Oracle DBA 应知应会 -- PGA自动管理

    PGA自动管理 Process Global Area,也就是常说的Program Global Area,PGA是数据库服务进程的私有空间.包含全局变量数据结构和控制信息,比如一个游标的执行空间,当 ...

  7. oracle临时表空间大小查询,查看oracle 系统临时表空间、undo表空间、SGA和PGA大小...

    1)检查oracle系统临时表空间大小: select sum(bytes)/1024/1024 "temp size(M)" from dba_temp_files where ...

  8. oracle 数据库 pga,Oracle程序大局区(PGA)

    Oracle程序全局区(PGA) 下图是共享服务器模式和专用服务器模式下,PGA.UGA的不同情况 下面是专有模式的pga图: 注:上图sort area是属于pga,SORT_AREA_RETAIN ...

  9. Oracle 12c 新参数 PGA_AGGREGATE_LIMIT 限制 PGA 内存总大小

    Oracle 12c 新参数 PGA_AGGREGATE_LIMIT 限制 PGA 内存总大小 在自动 PGA 内存管理模式下, Oracle DB 尝试通过动态控制分配给工作区的 PGA 内存量遵从 ...

最新文章

  1. Intellij IDEA的下载和使用(针对学生的免费使用计划)
  2. JavaScript 数组拼接打印_巧用控制台,提升JavaScript调试性能
  3. 简单的实现微信获取openid
  4. 屏蔽Crash 提示框的两种方式
  5. JAVA中使用bos做视频上传_JAVA语言之搭建物流BOS项目骨架
  6. 【Recat 应用】之 React 脚手架
  7. iOS开发笔记 2、Cocoa简明
  8. python定义空数组_python定义二维数组
  9. oracle怎么恢复误删除的列,三种方式恢复oracle数据库误删除的数据
  10. 毕业设计 : 基于Spark的海量新闻文本聚类 - Spark 新闻分类 文本分类新闻聚类
  11. 求助 电脑能正常上网,但开热点手机连上用不了。开的热点显示ipv6无网络访问权限。
  12. java图片闪烁_java在窗口中添加图片做动画,怎么一闪一闪的?
  13. python统计套利_统计套利——反转定律
  14. Linux 中的rsh,ssh
  15. 基于Linux的socket网络编程项目——游侠手机商城
  16. 窗口看门狗与独立看门狗区别
  17. 网络爬虫的原理和案例
  18. Destroy无法删除对象
  19. python获取期货行情可视化_用Pandas获取商品期货价格并可视化
  20. TP4056大电流1A使用注意事项

热门文章

  1. Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)
  2. QQ秀已然式微,而同时迭代的厘米秀正在雄起。
  3. Resistors in Parallel(Gym - 102028E 2018 ICPC 焦作E题 大数+规律C++版)
  4. 如何构建用户画像,给用户打“标签”?
  5. 不堪回首的真实往事:我和一个骗子网友的两年矛盾纠葛
  6. 【FFT】快速傅里叶变换详解
  7. 错误“a label can only be part of a statement and a declaration is not a statement”解决方法
  8. PHP获取客户端和服务器端IP
  9. TCP数据粘包的处理
  10. IDEA引用Class文件失败问题解决