返回顶部
首页 > 资讯 > 数据库 >oracle内存架构(一)
  • 279
分享到

oracle内存架构(一)

2024-04-02 19:04:59 279人浏览 泡泡鱼
摘要

当oracle数据库实例启动的时候,oracle数据库会分配一个内存区并且会启动后台进程。内存区存储的信息如下:·程序代码·每个连接会话的信息,包括当前没激活的会话·程序执行过程中需要的信息,比如正在获取当

oracle数据库实例启动的时候,oracle数据库会分配一个内存区并且会启动后台进程。

内存区存储的信息如下:

·程序代码

·每个连接会话的信息,包括当前没激活的会话

·程序执行过程中需要的信息,比如正在获取当前行的查询状态

·在进程间共享和通信的数据信息

·缓存数据,比如数据块和重作记录,它们也会存在于磁盘

基础的内存结构

oracle数据库包含几个内存区域,每个内存区域都包含好几个子组件

与oracle数据库相关的基础内存结构包括:

  • System global area (SGA) 系统全局区

SGA是一组共享内存结构,称为SGA组件,包含一个oracle数据库实例的数据和控制文件信息。所有的服务器进程和后台进程共享SGA内存区,SGA中存储的数据包括缓存的数据块和sql共享区域。

  • Program global area (PGA) 程序全局区

PGA是一个非共享内存区域,它只包含用于Oracle进程使用的数据和控制信息。当Oracle进程启动时,Oracle数据库创建PGA。

每个服务器进程和后台进程都有它自己的PGA内存区,单个PGA的集合是总的实例PGA的大小,在系统初始化参数中设置的是实例PGA的大小。

  • User global area (UGA) 用户全局区

UGA是与用户会话相关联的内存。

  • Software code areas

软件代码区是用来存储正在运行或可以运行代码的区域。Oracle数据库代码存储在一个软件领域,通常在不同的位置,从用户程序——更高级的或受保护的位置。

下图显示了这些内存之间的关系:

oracle内存架构(一)

oracle 数据库内存管理

内存管理包括为oracle数据库实例内存结构分配最佳大小,以满足数据库更改的需求。oracle数据库内存管理基于初始化相关内存参数的设置

内存管理的基本模式如下:

·内存自动化管理

先给数据库实例分配一个目标内存大小,实例会自动调整到目标内存大小并根据需要在SGA和PGA之间重新分配内存。

·自动共享内存管理

这种管理模式实现部分自动化,为SGA设置了一个目标大小,然后可以选择为PGA设置聚合目标大小,或者单独管理PGA工作区域。

·内存管理手册

与设置总内存大小不同,可以设置许多初始化参数,以单独管理SGA和实例PGA组件。

如果你通过DCBA(Database Configuration Assistant)创建oracle数据库并选择默认的初始化设置,此时自动化管理模式就是默认的内存管理模式。

UGA(User Global Area)概述

UGA是会话内存,它是分配给会话变量的内存,它主要存储登录信息、以及数据库会话所需的其它信息,实际上UGA存储的是会话的状态。

下图是UGA的结构:

oracle内存架构(一)

如果会话将PL / SQL包加载到内存中,那么UGA将包含包状态,即在特定时间存储在所有包变量中的值集。

当包的子程序更改变量时包的状态也会发生更改,默认情况下包变量是唯一的,并且会持久保存。

OLAP页面池也存储在UGA中。这个池管理OLAP数据页面,它相当于数据块。页面池是在OLAP会话开始时分配的,并在会话结束时释放。当用户查询多维对象(如多维数据集)时,OLAP会话将自动打开。

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

PGA(Program Global Area)概述

PGA是oracle服务器进程所独有的内存区,而不是系统上其它进程或线程所共享的内存区。因为PGA是特定于进程的,所以它从来不是在SGA中分配的。

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

下图显示了一个没有为共享服务器配置的实例PGA(所有PGA的集合)。可以使用初始化参数设置PGA的最大值,个人PGA可以根据需要增加到这个目标大小。

oracle内存架构(一)

PGA详细内容

PGA被细分为不同的区域,每个区域都有不同的作用。

下图为专用服务器会话所需的PGA内存结构:

oracle内存架构(一)

Private SQL Area(私有SQL区)

一个Private SQL Area包含关于解析的SQL语句和其他特定会话特定信息的信息。

当服务器进程执行SQL或PL / SQL代码时,进程将会使用私有SQL区域存储绑定变量值(绑定变量详解Http://blog.csdn.net/tianlesoftware/article/details/5458896)、查询执行状态信息和查询执行工作区域。

不要混淆在PGA中的私有SQL区域和共享的SQL区域,共享SQL区域在SGA中存储执行计划。在相同或不同的会话中,多个私有SQL区域可以指向SGA中的一个执行计划。例如,在一个会话中执行“SELECT * FROM sales”的20次执行和在不同会话中执行相同查询的10次执行可以共享相同的计划。每个执行的私有SQL区域不共享,可能包含不同的值和数据。

游标是特定私有SQL区的名称。如下图所示,你可以将游标看作是客户端上的指针和服务器端的状态。因为游标与私有SQL区域密切相关,所以术语有时可以相互互换使用。

oracle内存架构(一)

一个私有SQL区可以划分为如下几个区域:

·The run-time area(运行时区)

这个区域包含查询执行状态信息。例如The run-time area可以跟踪到目前为止在全表扫描中检索到的行数信息。当游标执行结束时The run-time area被释放。

oracle创建The run-time area作为执行请求的第一步。对于DML语句,当SQL语句关闭时,The run-time area将会被释放。

·The persistent area(持续数据区)

这个区域包含绑定变量值。当语句执行时会提供一个绑定变量值到SQL语句。只有当游标关闭时 The persistent area 才会被释放。

客户端进程负责管理私有SQL区。尽管客户端进程可以分配的私有SQL区的数量受到初始化参数“OPEN_CURSORS”的限制,但是私有SQL区的分配很大程度上还是取决于应用程序。

尽管大多数用户依赖于数据库实用程序的自动游标处理,但Oracle数据库编程接口提供给了开发人员更多的控制游标。一般来说,应用程序应该关闭所有不再被使用的开放游标,以释放持续数据区,并最小化用户所需的内存。

SQL Work Areas(SQL工作区)

工作区是用于内存密集型操作的PGA内存的私有区域。

例如,sort运算符利用sort区域来将一行数据进行排序。类似的,一个散列连接操作符使用一个散列区域从它的左输入构建一个哈希表,而位图合并使用位图合并区域来合并从多个位图索引扫描中检索到的数据。

下图显示了员工和部门之间的查询关系:

oracle内存架构(一)

在前面的示例中,运行时区跟踪全表扫描的进度。会话在散列区执行散列连接以匹配两个表中的行。排序则在排序区中进行。

如果处理的数据量大于工作区的容量,那么oracle数据库会将输入的数据分成小块。这样的话数据库就先会处理内存中的数据片段,然后将其余的数据写入临时磁盘以便稍后处理。

当启动自动PGA内存管理时,数据库会自动调整SQL工作区的大小,当然,也可以手动调整SQL工作区的大小。

一般来说,较大的SQL工作区是以高内存消耗换取优秀的操作性能。最理想的SQL工作区的大小是足以容纳由其关联的SQL操作符分配的输入数据和辅助内存结构。否则响应时间会增加,因为必须要将部分输入数据缓存在磁盘上。在极端情况下,如果SQL工作区的容量远远小于输入数据大小,那么数据库必须对数据块执行多次传递,从而极大地增加响应时间。

专用服务器和共享服务器模式下的PGA的使用

PGA内存区的分配取决于数据库采用的是专用服务器连接还是共享服务器连接。

下图会体现出他们之间的不同:oracle内存架构(一)




您可能感兴趣的文档:

--结束END--

本文标题: oracle内存架构(一)

本文链接: https://lsjlt.com/news/40015.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • oracle内存架构(一)
    当oracle数据库实例启动的时候,oracle数据库会分配一个内存区并且会启动后台进程。内存区存储的信息如下:·程序代码·每个连接会话的信息,包括当前没激活的会话·程序执行过程中需要的信息,比如正在获取当...
    99+
    2024-04-02
  • oracle内存架构(三)
    共享池共享池缓存各种类型的程序数据。例如,共享池存储解析SQL、PL/SQL代码、系统参数和数据字典信息。共享池涉及到数据库中发生的几乎所有的操作。例如,如果用户执行SQL语句,则oracle数据库访问共享...
    99+
    2024-04-02
  • oracle内存架构(二)
    System Global Area (SGA)概述SGA是一个可读写的内存区域,它和oracle数据库后台进程一起组成oracle数据库实例。所有用户进程对应的服务器进程都可以在SGA中读取信息。一些进程...
    99+
    2024-04-02
  • Oracle内存和架构知识点有哪些
    本篇内容介绍了“Oracle内存和架构知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Oracl...
    99+
    2024-04-02
  • MySQL整体架构与内存结构
    一  mysql 整体框架: MySQL是由SQL接口,解析器,优化器,缓存,存储引擎等组成的。   1. Connectors指的是不同语言中与SQL的交...
    99+
    2024-04-02
  • 详解Linux内核内存管理架构
    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存管理硬...
    99+
    2022-06-04
    Linux 内存 架构
  • Oracle内存结构和进程结构
    一、内存结构 在Oracle数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA),SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据...
    99+
    2024-04-02
  • Oracle之内存结构(SGA、PGA)
    一、内存结构SGA(System Global Area):由所有服务进程和后台进程共享;PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA。二、SGA包含实例的数据和控制信息,包含如下内...
    99+
    2023-06-06
  • SQLServer的内存管理架构详解
    目录一、Windows的虚拟内存管理器二、SQL Server 内存体系结构2.1、传统(虚拟)内存2.2、地址窗口扩展 (AWE) 内存三、从 SQL Server 2012 (11.x) 开始发生的改变3.1、对内存...
    99+
    2023-04-19
    SQLServer的内存管理架构 SQL Server内存管理 SQL内存架构
  • Oracle学习之DATAGUARD(一) DG架构
        DataGuard运行原理非常简单:传输日志、应用日志。下图表示了DG的基本架构日志传输服务将主库产生的日志数据传到从库。应用服务(Apply Service)验证日志...
    99+
    2024-04-02
  • Oracle体系结构之内存结构(SGA、PGA)
    Oracle体系结构之内存结构(SGA、PGA)  一、内存结构 SGA(System Global Area):由所有服务进程和后台进程共享; PGA(Prog...
    99+
    2024-04-02
  • SQLServer的内存管理架构是什么
    本文小编为大家详细介绍“SQLServer的内存管理架构是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQLServer的内存管理架构是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Windows...
    99+
    2023-07-06
  • MSSQL内存架构及管理是怎样的
    本篇文章给大家分享的是有关MSSQL内存架构及管理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 1.  MSS...
    99+
    2024-04-02
  • Oracle内存结构面试题有哪些
    这篇文章主要介绍“Oracle内存结构面试题有哪些”,在日常操作中,相信很多人在Oracle内存结构面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle内存...
    99+
    2024-04-02
  • Oracle 数据库 体系结构(一):存储结构
    目录 为什么要学习体系结构? 体系结构的定义 Oracle 物理结构 Oracle 逻辑结构 总结 为什么要学习体系结构? 之前的文章有讲解到 MySQL 、MongoDB 数据库,这些数据库我...
    99+
    2024-04-02
  • Oracle数据库的内存结构是什么
    这篇文章主要介绍“Oracle数据库的内存结构是什么”,在日常操作中,相信很多人在Oracle数据库的内存结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2024-04-02
  • 【赵强老师】Oracle数据库的内存结构
    首先,我们通过一张图片来了解一下Oracle数据库的内存结构,如下: 每个数据库实例有两个关联的内存结构—系统全局区(SGA),程序全局区(PGA)。 系统全局(SGA):一组共享的内存结构(称为SGA 组件),其中包含一个...
    99+
    2019-11-19
    【赵强老师】Oracle数据库的内存结构
  • Oracle内存结构SGA、PGA、UGA的示例分析
    这篇文章将为大家详细讲解有关Oracle内存结构SGA、PGA、UGA的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 一、 系统全局区  (Syst...
    99+
    2024-04-02
  • Oracle数据库中的内存结构是什么
    Oracle数据库中的内存结构主要包括SGA(System Global Area)和PGA(Program Global Area...
    99+
    2024-03-02
    Oracle
  • MySQL逻辑架构(一)
    MySQL 逻辑系统架构: 可以分为连接器,连接池,Sql接口,解释器,优化库,缓冲区,缓存,引擎 MySQL逻辑结构刻意看成二层架构,第一层通常叫做SQL Layer 在数据库系统处理底层数据 包括权限...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作