加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle12C SGA PGA UGA

发布时间:2020-12-25 21:09:07 所属栏目:站长百科 来源:网络整理
导读:SGA和PGA简介 1 sga组成: 2b4p1s(记忆) database buffer cache:包括 default pool,keep pool,recycle pool; redo log buffer share pool:包括 library cache,dictionary cache large pool java pool streams pool fixed sga 这部分区域的大小只有几MB 2.pga
副标题[/!--empirenews.page--]

SGA和PGA简介

1 sga组成: 2b4p1s(记忆)
database buffer cache:包括 default pool,keep pool,recycle pool;
redo log buffer
share pool:包括 library cache,dictionary cache
large pool
java pool
streams pool
fixed sga 这部分区域的大小只有几MB

2.pga组成:
1)stack space(sql work area) :sort area(排序区),hash area(构造hash表),bitmap merge area(索引区)
2)uga区: (private sql area占主要部分):
? ? ? 2.1) persistent 区域 :存放绑定变量的值,以及数据类型等游标信息
? ? ? 2.2) run-time 区域 :查询执行状态信息,X$KSMUP

Oracle为执行sql的每一个session分配一个private sql area,这个区域还存储了一个很重要的地址信息用来指向存储在library cache中的shared sql area,
里面保存了SQl的执行计划。Oracle建议程序开发过程中尽量多使用bind variable目的就是为了降低hard parse,
直接意思的理解就是让我们尽量重用library cache中的SQL执行计划,这样就可以降低share pool latch和library cache latch等闩的竞争。
其中bind variable从那里来呢?上面其实已经提到了就是在private sql area中的永久内存区域存在,这个区域只有在游标关闭的状态下才被释放。
这里最后要了解的是,永久内存或者是运行时内存的释放并不是将内存反还给OS,而是反还给了UGA

官方文档位置?

  • 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)

?

PGA 概述

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

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

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

Oracle12C SGA PGA UGA

图 2:实例 PGA

?

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

  • "Summary of Memory Management Methods"

1 PGA 的内容

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

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

Oracle12C SGA PGA UGA

图 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 区密切相关,这两个术语有时可以互换使用。

Oracle12C SGA PGA UGA

图 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 中为内存密集型操作分配的私有内存区。?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读