欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle内存结构

程序员文章站 2024-02-19 15:48:35
...

当实例启动时,Oracle数据库会分配一块内存区域并启动后台进程。OLAP页池也存放在UGA中。这个池管理着OLAP的数据页,它们与数据块

14.Oracle内存结构 14-1 Oracle内存结构介绍

当实例启动时,Oracle数据库会分配一块内存区域并启动后台进程。内存区域会存放如下信息:

14-1-1 基本的内存结构

Oracle数据库中基本的内存结构包括:

  • 系统全局区(SGA)
  • SGA是一组共享内存结构,也被称作SGA组件。它包含了Oracle数据库实例的数据和控制信息。SGA被所有的服务和后台进程所共享。样例数据存储在了SGA中的缓存数据块和共享SQL区域。

  • 程序全局区(PGA)
  • 一个PGA是一块独占内存区域,Oracle进程以专有的方式用它来存放数据和控制信息。当Oracle进程启动时,PGA也就由Oracle数据库创建了。

  • 用户全局区(UGA)
  • UGA的内存分配与用户会话有关。

  • 软件代码区
  • 这块区域内存的一部分,它用来存放正在执行或可被执行代码。Oracle数据库的代码就存放其中,当然,这和普通用户程序可不一样,它们放在更为专有并受保护的地方。

    图14-1说明了内存结构之间的关系

    Oracle内存结构

    14-1-2 Oracle数据库内存管理

    内存管理包括针对按需改变的数据库,要将Oracle实例的内存结构维护成最佳大小。Oracle数据库是按照与内存相关的初始化参数来管理内存。基本的内存管理操作有以下几点:

  • 自动内存管理
  • 你可以为实例的内存指定一个目标大小。当SGA和PGA按照需求要重新分配内存时,数据库实例会依据你的目标内存大小自动地调整。

  • 自动共享内存管理
  • 这种管理模式只是部分自动管理。你可以为SGA设置一个目标大小然后为PGA设置一个总计大小(或者单个管理PGA)。

  • 手动内存管理
  • 你可以设置一些初始化参数来分别管理SGA和PGA。

    如果你是用DBCA创建的数据库,并且选用基本安装,那么默认就是自动内存管理。

    14-2 用户全局区(UGA)概览

    UGA是会话内存,它是为会话变量而分配的。所谓会话变量是那些登录信息和其他数据库会话要求的信息。从本质上讲,UGA存放着会话状态。图14-2描述着UGA。

    Oracle内存结构

    如果一个会话向内存加载一个PL/SQL包,然后UGA就包含这个包的状态,在一个特定时间里,这个状态包含所有包的变量值。当一个包的子程序改变变量时,,包的状态就会改变。默认情况下,在会话的生命周期里,包的变量是唯一并存留的。

    OLAP页池也存放在UGA中。这个池管理着OLAP的数据页,它们与数据块等同。一个OLAP会话开始时也就分配页池,当会话结束,页池也就被释放。一个OLAP会话会自动打开而不论用户查询一个多维对象。

    在一个数据库会话中,UGA必须可用。正是由于这个原因,当使用共享服务连接时,UGA不能存放在PGA中因为PGA是指定的单个进程。因此,当使用共享服务连接时,UGA被存放在SGA中,这样任何共享服务进程都能访问它。当使用专有服务连接时,UGA被存放在PGA中。

    Oracle内存结构