Oracle每个会话使用的pga,谁能介绍下Oracle的ProcessMemory详解呢?

除了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)。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值