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数据库内存管理基于初始化相关内存参数的设置
先给数据库实例分配一个目标内存大小,实例会自动调整到目标内存大小并根据需要在SGA和PGA之间重新分配内存。
这种管理模式实现部分自动化,为SGA设置了一个目标大小,然后可以选择为PGA设置聚合目标大小,或者单独管理PGA工作区域。
与设置总内存大小不同,可以设置许多初始化参数,以单独管理SGA和实例PGA组件。
如果你通过DCBA(Database Configuration Assistant)创建oracle数据库并选择默认的初始化设置,此时自动化管理模式就是默认的内存管理模式。
UGA是会话内存,它是分配给会话变量的内存,它主要存储登录信息、以及数据库会话所需的其它信息,实际上UGA存储的是会话的状态。
如果会话将PL / SQL包加载到内存中,那么UGA将包含包状态,即在特定时间存储在所有包变量中的值集。
当包的子程序更改变量时包的状态也会发生更改,默认情况下包变量是唯一的,并且会持久保存。
OLAP页面池也存储在UGA中。这个池管理OLAP数据页面,它相当于数据块。页面池是在OLAP会话开始时分配的,并在会话结束时释放。当用户查询多维对象(如多维数据集)时,OLAP会话将自动打开。
PGA是oracle服务器进程所独有的内存区,而不是系统上其它进程或线程所共享的内存区。因为PGA是特定于进程的,所以它从来不是在SGA中分配的。
PGA是一个内存堆,它包含专用和共享服务器进程所需要的session变量。服务器进程分配它在PGA中需要的内存结构。
下图显示了一个没有为共享服务器配置的实例PGA(所有PGA的集合)。可以使用初始化参数设置PGA的最大值,个人PGA可以根据需要增加到这个目标大小。
一个Private SQL Area包含关于解析的SQL语句和其他特定会话特定信息的信息。
游标是特定私有SQL区的名称。如下图所示,你可以将游标看作是客户端上的指针和服务器端的状态。因为游标与私有SQL区域密切相关,所以术语有时可以相互互换使用。
这个区域包含查询执行状态信息。例如The run-time area可以跟踪到目前为止在全表扫描中检索到的行数信息。当游标执行结束时The run-time area被释放。
oracle创建The run-time area作为执行请求的第一步。对于DML语句,当SQL语句关闭时,The run-time area将会被释放。
这个区域包含绑定变量值。当语句执行时会提供一个绑定变量值到SQL语句。只有当游标关闭时 The persistent area 才会被释放。
客户端进程负责管理私有SQL区。尽管客户端进程可以分配的私有SQL区的数量受到初始化参数“OPEN_CURSORS”
的限制,但是私有SQL区的分配很大程度上还是取决于应用程序。
例如,sort运算符利用sort区域来将一行数据进行排序。类似的,一个散列连接操作符使用一个散列区域从它的左输入构建一个哈希表,而位图合并使用位图合并区域来合并从多个位图索引扫描中检索到的数据。
在前面的示例中,运行时区跟踪全表扫描的进度。会话在散列区执行散列连接以匹配两个表中的行。排序则在排序区中进行。
如果处理的数据量大于工作区的容量,那么oracle数据库会将输入的数据分成小块。这样的话数据库就先会处理内存中的数据片段,然后将其余的数据写入临时磁盘以便稍后处理。
当启动自动PGA内存管理时,数据库会自动调整SQL工作区的大小,当然,也可以手动调整SQL工作区的大小。
转载于:https://blog.51cto.com/swuhuhao/1974579
oracle内存架构(一)相关推荐
- oracle 内存分配和调优 总结
一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且google很多下.现在记录下来,做下备份. 一.概述: orac ...
- oracle java_pool_size_总结 Oracle 内存分配和调优
一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且google很多下.现在记录下来,做下备份.概述oracle 的内存可以按照共享和私有的角度分为系统全局 ...
- Oracle数据库实例之内存架构(一)
Oracle数据库实例之内存架构(一) Oracle数据库内存结构 基本内存结构 Oracle内存管理 用户全局区:UGA 程序全局区:PGA PGA的内容 专用和共享服务器模式下的PGA 系统全局区 ...
- 2 Oracle深度学习笔记 内存架构之UGA
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 2.Or ...
- 2.Oracle深度学习笔记——内存架构之UGA
2.Oracle深度学习笔记--内存架构之UGA 欢迎转载,转载请标明出处: http://blog.csdn.net/notbaron/article/details/50558136 UGA是回 ...
- erlang 架构原理_Erlang与Java内存架构
erlang 架构原理 我读了一篇关于Erlang VM的内存管理策略的非常非常有趣的文章. 它是Jesper Wilhelmsson撰写的论文 ,我认为讨论Erlang的内存设置和Oracle的Ja ...
- Erlang与Java内存架构
我读了一篇关于Erlang VM的内存管理策略的非常非常有趣的文章. 它是Jesper Wilhelmsson撰写的论文 ,我认为讨论Erlang的内存设置和Oracle的Java VM之间的差异可能 ...
- Oracle内存全面分析(转)
Oracle的内存配置与oracle性能息息相关.而且关于内存的错误(如4030.4031错误)都是十分令人头疼的问题.可以说,关于内存的配置,是最影响Oracle性能的配置.内存还直接影响到其他两个 ...
- oracle表领域的做成,Oracle的架构学会了就可以做一个框架软件设计师了
编辑推荐: 本文来自于csdn,本文主要是先来看一个图,这个图对于从整体上理解ORACLE的体系结构组件,最后,举一个用户提交sql语句的的例子来结束本文. 对于一个数据库系统来说,假设这个系统没有运 ...
- openfile存储服务器及oracle体系架构简介
1 openfile存储服务器的作用: 首先介绍下openfie解决的问题:一个服务器或一个物理主机,磁盘空间不可能永远增加,当一个服务器的磁盘空间满足不了现状我们应该如何处理. 平常的做法,我们采用 ...
最新文章
- window tool
- python爬取歌曲评论并进行数据可视化
- C# 使用 Windows API 操作控件: SendMessage
- 通信原理速学02:随机过程
- 微信小程序云开发小项目“研岸日记”日记记录分享,源码分享
- 女生中专学计算机,女生读中专哪个专业好
- OverMail 超越邮件
- 删除MSSQL数据库text字段中恶意脚本Script=***.js/script的方法
- HiHocoder 1036 : Trie图 AC自动机
- VS中编辑器显示行号
- ai神经网络滤镜安装包
- 哒哒租车系统(慕课网学习)
- JDK--box和unbox
- Tomcat - 解决which must be escaped when used within the value错误
- 被李刚儿子撞死的漂亮姑娘——晓风(照片)
- Winform UI界面设计例程——自定义PictureBox
- BP神经网络原理及其应用,bp神经网络的工作原理
- CPaintDC和CDC
- 北京「众合天下」51社保创始人余清泉:解读当前薪酬趋势,助力企业实现减负
- Google Chrome离线安装Native HLS Playback插件播放HLS
热门文章
- as3实现(可以操纵的)真正的由惯性导致的漂移
- 魔方机器人之下位机编程---模拟PWM
- 基于AE+C#实现在TOCControl中实现指定图层删除
- 【LeetCode】【字符串】题号:*434. 字符串中的单词数
- 《剑指offer》面试题33、32——把数组排成最小的数、整数中1出现的次数
- 数组中的奇数排在偶数组前面
- JS学习总结(12)——Math对象/时间对象
- Apache访问localhost页面403Forbidden
- 实习成长之路:关于ElasticSearch深度分页带来的思考,如何解决深度分页和跳页
- 通过SpringAop、Filter对Request参数解密和对Response内容加密