当前位置:Gxlcms > mysql > Oracle内存结构

Oracle内存结构

时间:2021-07-01 10:21:17 帮助过:31人阅读

当实例启动时,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说明了内存结构之间的关系

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

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

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

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

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

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

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

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

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

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

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

    linux

    人气教程排行