Oracle SGA PGA UGA

原创 2011年01月21日 20:32:00

SGA 系统全局区(System Global Area),几乎所有进程都会访问SGA中某一个点。

PGA 进程全局区(Process Global Area),进程或者线程专属内存区,其它进程或线程不能访问,由进程或者线程本地分配,在专用模式下

       PGA内存包含UGA,PGA其它区用于排序,位图合并,以及散列

UGA 用户全局区(User Global Area),这段内存与会话相关联,共享服务模式下UGA在SGA区,专用服务器模式下UGS在SGA区

 

SGA由谁在分配?

每个进程都有一个PGA区?PGA是一段内存,这段内存供各个进程和线程用,关于排序和散列操作,会有一个工作区的概念,每一个排序都会有一个工作区。

 

 

PGA 中进UGA 内存 手动管理与自动管理:

手动管理:采用这种方法管理,需要指定如果一个特定的进程允许使用多少内存来完成排序或散列

自动管理:只需要指定在系统范围内可以使用多少内存。

 

手动内存管理相关参数:

SORT_AREA_SIZE:在信息换出磁盘之前,用于对信息排序的内存总量

SORT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量,也就是说,如果
          SORT_AREA_SIZE 是512 KB,SORT_AREA_RETAINED_SIZE 是256 KB,那么服务器进程最初处理查
          询时会用512 KB 的内存对数据排序。等到排序完成时,排序区会“收缩”为256 KB,这256 KB
          内存中放不下的已排序数据会写出到临时表空间中。

HASH_AREA_SIZE:服务器进程在内存中存储散列表所用的内存量

          散列联结时会使用这些散列表结构,通常把一个大集合与另一个集合联结时就会用到这些结构。两个集合中较小的一
         个会散列到内存中,散列区中放不下的部分都会通过联结键存储在临时表空间中。

SORT_AREA_SIZE~SORT_AREA_ RETAINED_SIZE 这部分内存一般从PGA 分配,SORT_AREA_RETAINED_SIZE 这部分内存会在UGA 中分配

 

使用*_AREA_SIZE 参数时,需要记住以下重要的几点:
这些参数控制着SORT、HASH 和/或BITMAP MERGE 操作所用的最大内存量。一个查询可能有多个操作,这些操作可能都要使用这个内存,这样会创建多个排序/散列区。要记住,可以同时打开多个游标,每个游标都有自己的SORT_AREA_RETAINED 需求。所以,如果
把排序区大小设置为10 MB,在会话中实际上可以使用10 MB、100 MB、1 000 MB 或更多RAM。这些设置并非对会话的限制;它们只是对一个操作的限制。你的会话中,一个查询可以有多个排序,或者多个查询需要一个排序。这些内存区都是根据需要来分配的。如果像我们一样,将排序区大小设置为1 GB,这并不是说你要分配1 GB 的RAM,而只是说,你允许Oracle 进程为一个排序/散列操作最多分配1 GB
的内存。

 

一般地,随着在一个数据库上运行类似应用的用户数的增加,排序/散列所用的内存量也会线性增长。如果有10 个并发用户,排序区大小为1 MB,这就会使用10 MB 的内存,100 个并发用户可能使用100 MB,1 000 个并发用户则可能使用1 000MB,依此类推。

 

内存控制:根据上一条,手动分配很难保证Oracle 实例“合法”地使用内存,甚至不可能保证。你不能控制实例要用的内存量,因为你根本无从控制会发生多少并发的排序/散列。很有可能要使用的实际内存(真正的物理空闲内存)过多,而机器上并没有这么多可用内存。

 

 

自动管理

 

,理论上讲,如果一台机器有2 GB 的物理内存,可以分配768 MB 内存给SGA,768 MB内存分配给PGA,余下的512 MB 内存留给操作系统和其他进程。

 

 WORK_SIZE_POLICY:这个参数可设置为MANUAL或者AUTO,如果是MANUAL,会使用排列区和散列区大小参数来控制分配内存量;如果是AUTO,分配的内存量会根据数据库中当前工作负载而变化。默认为AUTO,推荐使用AUTO

 

PGA_AGGREGATE_TARGET:这个参数会控制实例为完成排序,散列的所有工作区总共应分配多少内存,

 

 

相关文章推荐

oracle SGA PGA UGA 内存

  • 2010年01月22日 16:50
  • 19KB
  • 下载

《Oracle编程艺术》学习笔记(10)-SGA,PGA,UGA和memory_target

Oracle有3个主要的内存结构: 系统全局区(System Global Area,SGA)是一个很大的共享内存段,几乎所有Oracle进程都要访问这个区中的某一点。 进程全局区(Process...
  • fw0124
  • fw0124
  • 2011年10月23日 23:03
  • 1308

oracle 每日一题-分析程序的内存开销(sga,pga,uga)

原始出处: http://www.plsqlchallenge.com/ 作者:Steven Feuerstein  运行环境:SQLPLUS, SERVEROUTPUT已打开 ...

sga pga uga分配情况分析

网络上流传着给Oracle数据库分配内存的一条法则:把80%的内存分配给Oracle使用,而又将这80%的内存分配80%给Oracle的SGA,剩下的20%分给Oracle的PGA。记得Tom曾说过类...
  • dbleo
  • dbleo
  • 2016年03月31日 10:49
  • 171

oracle体系结构三部曲之内存结构:PGA&UGA

PGA是一个进程专用内存,决不允许其他进程访问。通过C语言的运行时调用malloc()分配,可动态扩缩。而且,PGA绝对不会在oracle的SGA中分配,总是由进程在本地分配。    PGA是介于用户...

oracle实例的内存(SGA和PGA)调整,优化之原理和方法

一、SGA与PGA的结构: SGA 查看SGA: Sqlp> show sga 或 select * from v$sga; Total System Global Area  2894...

oracle 的SGA与PGA分析

Oracle 的SGA与PGA的详细分析
  • Ezitai
  • Ezitai
  • 2016年12月08日 10:07
  • 1239

Oracle实例内存(SGA和PGA)调整(转载)

一、名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 ...

oracle 修改sga,pga 提高性能

一、名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle SGA PGA UGA
举报原因:
原因补充:

(最多只允许输入30个字)