设为首页 加入收藏

TOP

11GConcepts(翻译第十四章)MemoryArchitecture(内存体系结构)(一)
2014-11-24 01:08:03 来源: 作者: 【 】 浏览:103
Tags:11GConcepts 翻译 十四 MemoryArchitecture 内存 体系结构

本章讨论了Oracle数据库instance的内存体系结构

本章包含下面小节:

·Introduction to Oracle Database Memory Structures

·Overview of the User Global Area

·Overview of the Program Global Area

·Overview of the System Global Area

·Overview of Software Code Areas

Introduction to Oracle Database Memory Structures(介绍Oracle内存结构)

当实例开启时,Oracle数据库分配一个内存区域以及启动后台进程。这个内存区域存储的信息如下:

·程序代码

·每个当前已经连接会话的信息,哪怕当前状态不是active的

·在程序执行期间需要的信息,举个例子,一个正在获取行的查询 的当前状态

·一些在多个进程中共享和传递的信息比如说锁

·被缓存起来的数据,比如数据块和redo records,它们在磁盘上也同样存在

Basic Memory Structures(基础内存结构)

和Oracle数据库相关的基础内存结构包括:

·System global area(SGA)系统公共区

SGA是一组共享的内存结构,称之SGAcomponents(SGA组件们),包含了一个Oracle数据库instance的数据和控制信息。SGA共享于所有的后台进程,和服务进程。举几个存在SGA中的例子,比如被缓存的数据块,以及共享SQL区域

·Program global area(PGA)程序公共区

PGA是非共享内存区域据,它包含的数据和控制信息只被一个Oracle process使用。PGA在Oracle process启动时分配。

每个服务进程和后台进程都有自己的PGA。这些PGA们集合起来叫做 total instance PGA,或者 instance PGA。数据库初始化参数设置了 instance PGA的大小,而不是针对每个单独pga设置的。

·User Global Area(UGA)用户公共区

和用户会话相关的内存叫做UGA

·Software code areas 软件代码区

软件代码区是内存的一部分,用来存储正在执行或者可以执行的代码。Oracle数据库代码存储在software area,它的位置通常和用户程序存在的位置不同—更独有或更受保护的位置

下图解释了这些内存结构之间的关系

\

Oracle Database MemoryManagement(Oracle数据库内存管理)

内存管理涉及根据数据库的变化,维护Oracle实例内存组件最合适的大小。Oracle数据库基于和内存相关的初始化参数来管理内存。内存管理的基础可选项如下:

·自动内存管理

你为instancememory指定一个目标大小。数据库instance会自动调整到目标内存大小,根据SGA和instance PGA的需要重新分配内存

·自动共享内存管理

这种管理模式是 半自动化,对SGA设置目标大小,然后有一个选择,要么对PGA设置一个合计的目标大小,要么单独管理PGA的各个区。

·手动内存管理

你设置了一堆初始化参数来单独管理SGA和PGA的各个组件,用来替代设置整个内存大小。

如果你通过Database Configuration Assistant(DBCA)创建了一个数据库,然后选择基础安装选项,那么默认就是自动内存管理。

Overview of the User Global Area

UGA是会话内存,它是分配给会话变量的内存,比如登录信息,以及其他所需要的信息。

基本上,UGA存储的是session的状态,下图描述了UGA。

\

如果一个会话加载了一个PL/SQL包到内存中,那么UGA将包含package state(包状态),它是一个特定时间中所有包变量中存储的值的集合。当包的子过程变量发生改变时,包状态发生改变。默认情况下,在会话的生命周期中,包变量是唯一以及不变的。

OLAP page pool同样存储在UGA。这个池管理OLAP数据页(也就是数据块)。这个page pool是当一个OLAP 会话开启时分配,会话结束时释放。当任何时候用户查询维度对象 比如cube时 OLAPsession 将自动打开。

UGA必须在会话的整个存活期间是可用的。因为这个原因,当数据库使用shared server connection模式时,UGA不能存储进PGA,因为PGA是针对单个进程的。因此,当数据库使用shared server connection模式时 UGA将存储在SGA当中,使得任何sharedserver process可以访问它。当使用dedicated server connection模式时,UGA在PGA中存储

Overview of the Program Global Area

PGA是给指定进程或线程的内存,它是独占的,不与其他进程和线程共享。因为PGA是进程独占的,那么它永远都不会从SGA分配。

PGA是一个内存堆,它包含专用或共享服务器进程所需要的会话变量,服务器进程需要时会在PGA中分配内存结构。

举个生活例子,PGA类似于文员使用的临时工作台。在这个例子中,文员为客户(client process)服务的server process。文员对一部分工作台进行清理,用来存储和客户要求有关的细节,以及和客户要求有关的文件就行排列,当工作完成以后,将让出这部分空间。

下图显示了一个 instance(专有模式)中的instance pga(所有PGAs的汇总)。你可以使用初始化参数去设置instance PGA的目标最大大小。

\

注意:后台进程同样分配它们自己的PGAS。这里的讨论是只集中在server process PGA

Contents of the PGA(PGA中的内容)

PGA中可以细分为不同的区域,每个区域都有一个单独的用处。下午显示了在专有连接中PGA中可能存在的内容(这些东西并不是在每个case都存在)

\

Private SQL Area(私有SQL区域)

私有SQL区域持有关于被解析过的SQL语句的信息以及进程中本会话特定的信息。当一个server process执行SQL 或PL/SQL代码,进程使用私有SQL区来存储绑定变量值,查询的执行状态信息,以及查询的执行工作区。

不要混淆私有SQL区这里的私有,这个东西是存在UGA中,和共享 SQL 区相关,共享SQL区 则在SGA中(存着执行计划)。多个在相同session或不同session中的私有 SQL 区可以指向SGA中相同的执行计划。举个例子,一个session中SELECT * FROM employees执行了20次,另外一个session执行相同的语句10次,那么它们可以共用相同的执行计划。每个执行的私有 SQL 区是不共享的可能包含不同的值和数据。

cursor是指向特定私有SQL 区的名字或句柄。像下图显示的,你可以把cursor想象为一个在client段的指针,以及server端的一个状态, 因为cursos和私有 SQL 区紧密相关,这两个名词一般都混着用

\

私有 SQL 区细分为以下区:

·run-time area(运行时)

这个区包含了查询的执行状态信息,举个

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇禁止以操作系统认证方式登录数据库 下一篇全面解析Oracle数据库的系统和对..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: