ITPub博客

首页 > 数据库 > Oracle > oracle 内存结构

oracle 内存结构

原创 Oracle 作者:winston_DBA 时间:2015-04-09 18:16:07 0 删除 编辑

1.基础结构

   oracle内存结构主要包括四部分:SGA(系统全局区)PGA(程序全局区)UGA(用户全局区)和软件代码区域。

   其中,

SGA:主要存放oracle的共享数据和控制信息。该区域被所有的服务器进程和后台进程共享。

PGA:存放某一个oracle进程的数据和控制信息,这些进程可以是服务器进程,也可以是后台进程。

UGA:存放与用户会话信息有关的内容,例如用户登录信息等。UGA由两部分组成:session variable 和OLAP POOL。

   在共享服务器模式下,UGA在SGA中存在,而在专用服务器模式下,UGA在PGA中存在。原因是UGA存放着用户会话的信息,该区域需要在会话的整个生命周期内都是可用的。共享服务器模式下,UGA需要记录多个用户的信息,而PGA是每个进程专有区域,无法实现记录多用户会话信息功能,而SGA是所有进程共享的,所以共享模式下,UGA存在于SGA中。

   软件代码区域:主要存放oracle软件运行所需要的代码,该内存区域和其他内存区域分开,单独存在。

 

2.内存管理方式

   主要包括:自动内存管理、自动共享内存管理和手工内存管理

   其中,

自动内存管理:指定实例将用到的内存总大小,实例将会自动在SGA和PGA之间进行分配。

自动共享内存管理:该管理方式为部分自动化,即设置SGA大小,并可选的设置PGA大小。让SGA内存自动管理的同时单独对PGA进行管理。

手工内存管理:通过初始化参数,手工管理SGA和PGA。

 

3.PGA

   PGA理解:打个比喻,PGA就像是文档管理员的临时工作空间。而文档管理员就代表着替客户端进程(client process)干活的服务器进程(server process)。服务器进程创建后,在PGA中分配一块内存,用于存放用户请求的具体信息,并将用户请求的结果进行排序,结果返回后,释放工作空间。

   PGA的内容:SQL WORK AREA(排序区、HASH区、位图合并区)、session memory和private SQL area(persistent area和runtime area)

   其中,

private SQL area:存放已经解析的SQL语句和会话相关的信息。当一个服务器进程执行SQL或者PL/SQL代码的时候,服务器进程使用private SQL area来存储绑定变量的值(persistent area,只有当游标关闭,才释放该区域),查询执行的状态信息和查询执行工作区域(runtime area,DML中,语句结束,则该区域释放)。

SQL work area:该区域主要存放内存密集型的操作,比如排序,hash连接,位图连接等。

当启用PGA自动内存管理时,数据库会自动调整SQL work area的大小。

   共享服务器模式和专用服务器模式下的PGA内存分配:

Memory area

Dedicated server

Shared server

Nature of session

Private

Shared

Location of the persistent area

PGA

SGA

Location of the run-time area for DML/DDL statements

PGA

PGA

 

4.SGA

   SGA是随着数据库实例后台进程启动而启动的。当然,服务器进程也可以访问SGA,其只是在数据库操作时,可以往里面写内容。

   每个实例都有自己的SGA(RAC环境具有多个实例,多个SGA)。

   SGA的主要组件:database buffer cache/ redo log buffer/ shared pool/ large pool/ java pool/ stream pool/ fixed SGA

5.软件代码区域

   软件代码区域是存储正在运行或准备运行的代码的一块内存区域,这块区域比较特殊,被oracle区别于用户程序单独存放并保存起来。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30167136/viewspace-1558279/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-17

  • 博文量
    76
  • 访问量
    414953