一、12c:官档

  • Books → Concepts → Part V Oracle Instance Architecture → 14 Memory Architecture → 14.2 Overview of the User Global Area
  • Books → Concepts → Part V Oracle Instance Architecture → 14 Memory Architecture → 14.3 Overview of the Program Global Area (PGA)

二、UGA 概述

UGA 是为会话变量分配的会话内存, 如登录信息和数据库会话所需的其他信息。 实际上,UGA 存储了会话状态。

图 1 描述了 UGA

图 1:用户全局区 (UGA)

如果某个会话将 PL/SQL 包加载到内存, 则在 UGA 中包含包状态,即是所有包变量在某个特定的时刻所存储的值集。当包的子程序更改变量的值时,包状态也将更改。默认情况下,包变量在会话的存活期间是唯一且持久的。

OLAP 页面缓冲池也存储在 UGA 中。该池管理相当于数据块的 OLAP 数据页。页缓冲池在启动一个 OLAP 会话时分配,并在该会话结束时释放。每当用户查询一个多维对象(如立方体)时,就会自动打开一个 OLAP 会话。

该 UGA 必须在数据库会话的整个存活期间是可用的。 由于这个原因, 当使用共享服务器的连接时,UGA 不能存储在 PGA 中,因为 PGA 是特定于单个进程的。因此,当使用共享服务器的连接时,UGA 被存储在 SGA 中,以使任何共享服务器进程都能访问它。在使用专用服务器的连接时, UGA 存储在 PGA 中。

See Also:

  • "PL/SQL Packages"
  • "Connections and Sessions"
  • 《Oracle Database Net Services Administrator's Guide》了解共享服务器连接
  • 《Oracle OLAP User’s Guide》关于 Oracle OLAP 的概述

三、SGA 概述

PGA 是特定于一个操作系统进程或线程的内存区,且不和系统上的其他进程或线程共享。由于 PGA 是特定于进程的,所以它决不会在 SGA 中分配。PGA 是包含某个专用或共享服务器进程所需的会话变量的内存堆。服务器进程在需要时会在 PGA 中分配内存结构。

PGA 好比是文员所使用的临时工作台面。在这个比喻中,文员是为客户(客户端进程) 服务的服务器进程。文员清理出台面的一部分,使用这个工作空间来存储有关客户要求的详细信息,并对顾客请求的文件夹排序,然后在完成工作时让出工作空间。

下图显示某个未配置为共享服务器的实例的 PGA(所有 PGA 的集合) 。您可以使用一个初始化参数设置实例 PGA 的目标最大大小。根据需要, 各个 PGA 可以按需增大到这个目标大小。

图 2:实例 PGA

Note:
后台进程也分配它们自己的 PGA。 本讨论的重点仅限于服务器进程 PGA。
See Also:

  • "Summary of Memory Management Methods"

1 PGA 的内容

PGA 被进一步细分为多个不同区域,每一个都有不同的目的。

下图显示一个专用服务器会话的 PGA 中可能包含的内容。不是所有的 PGA 区域在任何情况下都存在。

图 3:PGA 内容

1.1 Private SQL 区

私有 SQL 区保存了有关某个已解析的 SQL 语句的信息,和其他特定于会话的信息。

当服务器进程执行 SQL 或 PL/SQL 代码时,该过程使用其私有SQL 区域,来存储绑定变量值、查询执行状态信息、和查询执行工作区。

不要混淆在 UGA 中的私有 SQL 区,和在 SGA 中存储执行计划的共享 SQL区。在相同或不同的会话中的多个私有 SQL 区,可能指向 SGA 中的一个单一执行计划。 例如,在某个会话中运行“SELECT * FROM sales” 20 次,而在另一个不同的会话中运行同一查询 10 次,但它们可以共享相同的执行计划。每次运行的私有 SQL 区并不共享,因此可能包含不同的值和数据。

游标是指向某个特定的私有 SQL 区的一个名称或句柄。如下图所示,你可以将游标看成是一个从客户端指向服务器端状态信息的指针。游标与私有 SQL 区密切相关,这两个术语有时可以互换使用。

图 4:游标

私有 SQL 区又分为以下几个区域:

  • run-time 区域
    此区域包含查询执行状态信息。例如,run-time area会跟踪到目前为止在全表扫描中检索到的行数。
    Oracle 数据库将创建 run-time 区域,作为一个执行请求的第一步。对于 DML 语句,其 run-time 区域将在 SQL 语句关闭时被释放。
  • persistent 区域
    此区域包含绑定变量的值。绑定变量是执行 SQL 语句时,在运行时提供给 SQL 语句的值。仅当关闭该游标时,persistent  区域才被释放。

客户端进程负责管理私有 SQL 区。虽然客户端进程可以分配的私有 SQL 区数量由初始化参数 OPEN_CURSORS 限制,但私有 SQL 区的分配和释放主要取决于应用程序。

尽管大多数用户依赖于数据库实用程序的自动游标处理机制,但 Oracle 数据库编程接口仍为开发人员提供了对游标更多的控制。一般情况下,应用程序应关闭所有打开的且不再使用的游标,以释放持久区域, 并最小化应用程序用户的内存需求。

See Also:

  • "Shared SQL Areas"
  • 《Oracle Database Development Guide》和《Oracle Database PL/SQL Language Reference》了解如何使用游标

1.2 SQL Work 区

工作区是在 PGA 中为内存密集型操作分配的私有内存区。

例如, 排序操作使用排序区来对一组行进行排序。同样,哈希联接操作将其左侧数据为输入,并使用哈希区来创建一个哈希表,而位图合并操作则使用位图合并区来合并从扫描多个位图索引检索到的数据。

如下示例显示了 employees 表和 departments 表相联接的查询计划。

SELECT * 2  FROM   employees e JOIN departments d 3  ON     e.department_id=d.department_id 4  ORDER BY last_name;
.
.
.
--------------------------------------------------------------------------------
| Id| Operation           | Name        | Rows  | Bytes | Cost (%CPU)| Time    |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT    |             |   106 |  9328 |    7  (29)| 00:00:01 |
| 1 |  SORT ORDER BY      |             |   106 |  9328 |    7  (29)| 00:00:01 |
|*2 |   HASH JOIN         |             |   106 |  9328 |    6  (17)| 00:00:01 |
| 3 |    TABLE ACCESS FULL| DEPARTMENTS |    27 |   540 |    2   (0)| 00:00:01 |
| 4 |    TABLE ACCESS FULL| EMPLOYEES   |   107 |  7276 |    3   (0)| 00:00:01 |
--------------------------------------------------------------------------------

在示例 1 中,run-time 区域跟踪全表扫描的进度。此会话在哈希区中执行一个哈希联接,以匹配两个表中的行。而 ORDER BY 排序操作在排序区中进行。

如果要由该运算符处理的数据量太大,不能在SQL Work 区中完成, 则 Oracle 数据库会将输入数据分成更小的片断。这样一来,数据库先在内存中处理一些数据片断,而将其余数据写入到临时磁盘存储,以待后续处理。

当启用了自动 PGA 内存管理时,数据库自动优化工作区大小。你也可以手动控制和优化工作区大小。更多的信息,请参阅“Memory Management”。

通常,更大的工作区可以显著提高操作性能,但这是以更多的内存消耗为代价的。理想的情况是,工作区域的大小足以容纳由其关联的SQL操作符分配的输入数据和辅助内存结构。否则,响应时间会增加,因为输入数据的一部分必须被缓存到磁盘上。在极端情况下,如果工作区的大小相比输入数据的大小显得过小,则数据库必须来回多次倒腾这些数据片断,极大地增大了响应时间。

See Also:

  • 《Oracle Database Administrator’s Guide》了解如何使用自动 PGA 管理
  • 《Oracle Database Performance Tuning Guide》 了解如何调整 PGA 内存

2 在专用和共享服务器模式中使用 PGA

PGA 内存分配取决于数据库是使用专用的还是共享的服务器连接。

表 1 显示了差异之处。

内存区 专用服务器 共享服务器
会话内存的性质 私有的 共享的
persistent 区域的位置 PGA SGA
DML/DDL 语句的run-time区域的位置 PGA SGA

表 14-1 专用和共享服务器之间的内存分配差异

See Also:

  • 《Oracle Database Administrator’s Guide》了解如何将数据库配置为共享服务器

Oracle:UGA PGA相关推荐

  1. oracle系统pga,oracle教程之PGA管理

    作为一个复杂的Oracle数据库系统来说,每时每刻都要处理不同用户所提交的SQL语句,获取数据并返回数据给用户.前面已经说到,解析SQL语句的工作是在Oracle实例中的shared pool所完成的 ...

  2. Oracle内存管理PGA详解

    当用户进程连接到数据库并创建一个对应的会话时,Oracle服务进程会为这个用户专门设置一个PGA区,用来存储这个用户会话的相关内容.当这个用户会话终止时,系统会自动释放这个PGA区所占用的内存.这个P ...

  3. oracle数据库修改pga,18.1.2 修改PGA

    18.1.2  修改PGA PGA是指Process Global Area,即进程全局区.每位客户端用户连接到Oracle服务器,均会由服务器分配一定内存来保持连接,并将在该内存中实现用户私有操作. ...

  4. su oracle : 只切换用户,而不切换环境;就是说切到oracle用户后,使用的依旧是root的环境。 su - oracle :同时切换用户和环境

    su oracle : 只切换用户,而不切换环境:就是说切到oracle用户后,使用的依旧是root的环境. su - oracle :同时切换用户和环境 su   oracle:不会执行oracle ...

  5. Oracle:推迟了的Java Enterprise Edition 8将会在“今年之内”发布

    Oracle一直致力于"在今年年内"推出迟到了的Java Enterprise Edition 8. Oracle:推迟了的Java Enterprise Edition 8将会在 ...

  6. Oracle:ORA-01789: 查询块具有不正确的结果列数 分析原因和解决办法

    Oracle:ORA-01789: 查询块具有不正确的结果列数 一.分析原因 union指令的目的是将两个sql语句的查询结果合并起来, 可以查看你要的查询结果 . 但是要注意使用union连接的两个 ...

  7. oracle中defined,Oracle:专栏定义(Oracle: column ambigously defined)

    Oracle:专栏定义(Oracle: column ambigously defined) 我收到以下错误. 据我所知,所有列都是由表名定义的,所以我不明白为什么我从Oracle数据库中得到这个错误 ...

  8. case when then else_啃食Oracle:条件分支表达式CASE

    啃食Oracle:条件分支表达式CASE CASE表达式是条件分支表达式,类似于if - elsif -else条件分支语句.常见用法是在select的表达式列表中使用. 以下图示来自于官方文档 上图 ...

  9. oracle查询数据库的函数,Oracle:树查询及有关函数

    Oracle:树查询及相关函数 Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了.依托于该语法,我们可以将一个表形结构的中以 ...

最新文章

  1. 《Android开发从零开始》——16.Service学习(2)
  2. 070_html url编码
  3. 史上最详细“截图”搭建Hexo博客——For Windows
  4. 21.Longest Palindromic Substring(最长回文子串)
  5. 最长有序子序列—动态规划算法
  6. java中整数如何表示,在Java中如何在位级别上内部表示整数?
  7. jQuery 教程02-jQuery 语法
  8. C#LeetCode刷题-程序员面试金典
  9. fossid安装教程_Win10环境下6sV2.1模型编译
  10. hadoop ubantu环境搭建_Ubuntu16.04 下 hadoop的安装与配置(伪分布式环境)
  11. 俄罗斯黑客被指攻击本国的工业组织机构
  12. 剑指offer面试题[34]丑数
  13. 计算机的发展经历阶段应用领域,手机的发展经历了哪3个阶段?
  14. cf-645D. Robot Rapping Results Report(判断是否是惟一的拓扑序列)
  15. c语言计算个人成绩平均分,C语言 | 计算总平均分及第n个人的成绩
  16. 【流畅的Python学习笔记】2023.4.21
  17. 第一批阳了的中年人:卷不赢,躺不平,摆不烂
  18. 一文深度学习建模预测全流程(Python)
  19. flex 布局
  20. 在体育方面计算机的应用,计算机技术在高校体育教学中的应用

热门文章

  1. java 省市区代码表
  2. DCB学习之三(CN)
  3. 为什么说Python是人工智能方向的主流编程语言?
  4. 常用多媒体文件格式压缩标准解析学习---图像表示与声音基本
  5. dede获取上级栏目名称
  6. Pots --bfs
  7. 使用WebMagic+ActiveMQ+Quartz实现全国城镇天气自动更新的API接口开发
  8. 微信小程序数据绑定与模板语法
  9. Selenium Chrome的最全常用Option及其一些加速优化
  10. 银联错失的良机,“网联”来补上