初学Oracle时,你可能会对Oracle中PGA和UGA两者间的区别产生疑问,这里就PGA和UGA两者间的区别发表下个人意见,在这里拿出来和大家分享一下。
The Process Memory除SGA(System Global Area)之外,Oracle进程还使用下面三个全局区:
The Process Global Area (PGA);
The User Global Area (UGA);
The Call Global Area (CGA)。
实际上PGA和UGA两者间的区别跟一个进程和一个会话之间的区别是类似的。尽管说进程和会话之间一般都是一对一的关系,但实际上比这个更复杂。一
个很明显的情况是MTS配置,会话往往会比进程多得多。在这种配置下,每一个进程会有一个PGA,每一个会话会有一个UGA。PGA所包含的信息跟会话是
无任何关联的,而UGA包含的信息是以特定的会话为基础的。
The PGA:进程全局区(PGA)即可以理解为Process Global Area,也可以理解为Program Global
Area。它的内存段是在进程私有区(Process Private Memory)而不是在共享区(Shared
Memory)。它是个全局区意味着它包含了所有代码有可能进入的全局变量和数据结构,但是它是不被所有进程共享的。每个Oracle的服务器进程都包含
有属于自己的PGA,它只包含了本进程的相关特定信息。PGA中的结构不需要由latches来保护,因为其它的进程是不能进入到这里面来访问的。
PGA包含的是有关进程正在使用的操作系统资源信息以及进程的状态信息,而其它的进程所使用的Oracle的共享资源是在SGA中。PGA是私有的而不是共享的,这个机制是有必要的,因为当进程死掉后可以把这些资源清除和释放掉。
PGA包含两个主要区域:Fixed PGA和Variable PGA或称为PGA Heap。 Fixed PGA的作用跟Fixed SGA是类似的,都包含原子变量(不可分的),小的数据结构和指向Variable PGA的指针。
Variable PGA是一个堆。它的Chunks可以从Fixed Table
X$KSMPP查看得到,这个表的结构跟前面有提到的X$KSMSP是相同的。PGA HEAP包含了一些有关Fixed
Table的永久性内存,它跟某些参数的设置有依赖关系。这些参数包含DB_FILES,LOG_FILES,CONTROL_FILES。
The UGA:UGA(User Global Area)包含的是特定会话的信息,有如下一些:
所打开游标的持续和运行时间内的区域;
包的状态信息,特定的变量;
Java会话状态;
可以用的ROLES;
被ENABLE的跟踪事件;
起作用的NLS参数设置;
打开的DBLINK;
会话的入口控制。
跟PGA一样,UGA也由两区组成:Fixed UGA和Variable UGA,也称为UGA HEAP。 Fixed UGA包含了大约70个原子变量,小的数据结构和指向Variable UGA的指针。
UGA HEAP中的Chunks可以从它们自己的会话中通过查看表X$KSMUP获得相关信息,这个表的结构跟X$KSMSP是一样的。UGA
HEAP包含了一些有关fixed
tables的永久性内存段,跟一些参数的设置有依赖关系。这些参数有OPEN_CURSORS,OPEN_LINKS,和
MAX_ENABLE_ROLES。
UGA在内存中的位置依赖于会话的配置方式。如果会话连接的配置方式是专用服务器模式(DDS)即是一个会话对应一个进程,则UGA是放在PGA中
的。在PGA中,Fixed UGA是其中的一个Chunk,而UGA
HEAP是PGA的一个子堆(Subheap)。如果会话连接是配置为共享服务器模式(MTS), Fixed UGA是SHARED
POOL中的一个Chunk,而UGA HEAP则是SHARED POOL中的子堆(Subheap)
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。
分享到:
相关推荐
Oracle数据库的内存结构主要包括三个关键部分:System Global Area (SGA), Program Global Area (PGA), 和 User Global Area (UGA)。这些区域都是用于存储和处理数据库操作的数据和信息。 1. **System Global Area ...
在Oracle数据库管理中,PGA(Program Global Area)和UGA(User Global Area)是两个非常重要的内存区域,它们对于数据库的性能和优化起着至关重要的作用。`pga_uga.zip_PGA_memory`这个压缩包文件显然是为了监控和...
此sql可以帮助你查看oracle对当前pga大小的推荐值,达到oracle性能优化的目的
Oracle数据库系统是企业级数据管理的重要工具,其中的SGA(System Global Area)和PGA(Program Global Area)是两个核心概念,对于理解Oracle数据库的工作原理至关重要。本文将深入探讨这两个概念,以及它们在...
两者之间的区别主要体现在内存的共享性和私有性上,SGA实现了资源的全局共享,而PGA则确保了每个会话的独立性和高效性。 #### PGA管理与优化 1. **自动PGA管理**:自Oracle 10g开始,引入了自动PGA内存管理功能,...
PGA导致oracle内存泄露,经历1个月的时间,终于搞定该问题,对于学习ORACLE 内存泄露是一次比较好的总结。
SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。
Oracle 内存结构研究 - PGA 篇 Oracle 内存结构研究 - PGA 篇是 Oracle 中最重要的内存结构之一,PG 即...PGA 是 Oracle 内存结构中非常重要的一部分,理解 PGA 的管理模式和相关参数对 Oracle 的性能优化非常重要。
获得optimal、onepass、multipass执行次数的百分比,很明显,optimal所占的百分比越高越好,假如onepass和multipass占的百分比很高,就不需要增加pga_aggregate_target的值了,或者调整SQL语句以使用更少的PGA区
OracleSGA和PGA管理
### 浅析Oracle数据库与DB2数据库 #### 一、引言 在当前的企业级应用环境中,数据库管理系统(DBMS)扮演着至关重要的角色。Oracle数据库与IBM的DB2数据库作为市场上两大主流的关系型数据库系统,各有其独特的优势...
相反,在DSS或BI系统中,复杂的查询和数据分析任务可能需要更多的PGA资源来处理临时数据和工作区。 总之,优化Oracle实例的内存配置是一个持续的过程,需要定期监控数据库性能指标,分析查询模式,并根据业务需求...
在Oracle数据库管理中,正确配置初始化参数对于确保系统的稳定性和性能至关重要。本文将详细介绍如何修改与监控`Process`, `Session`, `SGA`, 和 `PGA` 相关的初始化参数,并提供具体的SQL命令。 #### 1. Process和...
在Oracle数据库中,等待事件是指数据库实例在执行某个操作过程中由于资源竞争或限制而处于等待状态的情况。这些等待事件可能导致数据库性能下降,进而影响到整体的应用性能。因此,理解和分析这些等待事件对于优化...
本文将探讨通过优化SQL语句在Oracle中的解析(Parse)、执行(Execute)和提取结果(Fetch)三个阶段来提升数据库性能的方法。 1. **解析(Parse)优化** 解析过程是SQL语句在Oracle中执行的第一步,包括计算语句...
Oracle内存结构是数据库性能优化的关键因素,它主要分为两大部分:共享内存(SGA)和进程私有内存(PGA及UGA)。理解这些组件的工作原理对于优化Oracle数据库的性能至关重要。 1. SGA(System Global Area) SGA是...
而Oracle实例则是运行在操作系统上的内存结构(如SGA和PGA)和一系列后台进程,如PMON、SMON、LGWR和CKPT等。实例与数据库的关系是实例提供对数据库的操作和管理。 在Oracle中,DB_NAME代表数据库名,通常在创建...