ORACLE内存结构简介

ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大。我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握。我们会着重从理论基础体系角度再逐步到实战应用。实际上,如果没有掌握基础理论体系,而直接生搬硬套一些维护技术经验,那也只是空中楼阁罢了。而如果你想直接通过一两篇文章学到什么秘籍成为维护或是DB优化高手那也是不现实的。所以这些文适合静下心来真正想了解学习ORALCE体系的读者。方法论掌握好,起码头脑中的思路方向是正确的,至于术也就是水到渠成。

我们通常所说的ORACLE 11g 中g也就是grid,代表网格技术。

Oracle 网格计算技术包括:

• 自动存储管理(ASM)

• RealApplication Cluster (RAC)

•Application Server Cluster

• Enterprise Manager Grid Control

ORACLE内存结构简介

我们所说的广义上的内存是指服务器硬件内存。当数据库部署在服务器上后会分配给它一定的内存空间,内存的管理就交由数据库本身来管理。很多数据库性能问题反应在内存不足上。不足有可能是服务器预分配给oracle的内存本来就少了,或者是内存没有利用好。本文就oracle内存管理机制做一下介绍,起到抛砖引玉。

上图来源于oracle官方文档,此图很好的描述了oracle的内存组件结构。

每个数据库实例有两个关联的内存结构—系统全局区(SGA),程序全局区(PGA)。

系统全局区(SGA):一组共享的内存结构(称为SGA 组件),其中包含一个OracleDB 实例的数据和控制信息。SGA 由所有服务器进程和后台进程共享。SGA 中存储的数据有高速缓存的数据块和共享SQL 区域等;

程序全局区(PGA):包含某个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA 的访问是独占式的。每个服务器进程和后台进程都具有自己的PGA。

就SGA几个关键组件做以说明:

共享池:用于缓存可在用户间共享的各种构造,比如给定SQL 语句的语法分析树和执行计划;

数据库缓冲区高速缓存:从数据库中检索到的数据块是缓存在此,数据块从此内存组件对数据块进行操作,降低了硬盘IO负担,如果用户进程所需的数据在该区域能很找到,我们称之为高速缓存区命中,高的命中率反映出来的效果就是操作反应快,这点很好理解,数据库优化中很有必要考虑这点;

KEEP 缓冲区池:一种专用数据库缓冲区高速缓存,用于长时间在内存中保留数据块。一些频繁使用的数据块可相对长期的保留在此,不至于每次都从硬盘获取,从而优化了数据库的性能;

RECYCLE 缓冲区池:一种专用数据库缓冲区高速缓存,用于从内存中快速回收或删除数据块。相对于KEEP的对立面,很好理解;

nK 缓冲区高速缓存:多种专用数据库缓冲区高速缓存中的一种,用于存放大小不同于默认数据库块大小的数据块。注意默认数据块为8K;

重做日志缓冲区:用于存放有关对数据库所做更改的信息,重做信息在写入磁盘中重做日志文件(即redo文件)前,将缓存在此处。重做日志写入磁盘的频率很高,什么时间什么条件下写都是挺有意思的知识,重做日志文件方面我们计划在后边存储体系章节再讨论学习。

大型池:用于为某些大型进程(例如Oracle 备份和恢复操作)和I/O 服务器进程提供大型内存分配;

看到此你或许就有疑问,oracle是怎么让这些内存结构和谐共处的。在创建DB的时候会生成初始化参数,当然这些参数是可以手动修改的。当然最简单的办法是让oracle自己管理并优化内存结构,因为只有它最懂自己的身体内部。这些知识我们会在后期性能优化章节来介绍的。

今天的知识就到此,希望能给你带来一些帮助。欢迎你留言交流,欢迎关注分享。

---------------END----------------

【取知有道】这里欢迎爱好学习的朋友,着重数据库等IT知识的分享学习。

请敬关注【取知有道】订阅号。微信搜索公众号【取知有道】,添加关注!

或长按此二维码添加关注!

近期即将分享(6月份):

Oracle基础体系结构方面,涉及实例内存结构、进程结构、物理存储结构、逻辑存储体系等基础理论。

 

时间: 2024-10-06 00:22:55

ORACLE内存结构简介的相关文章

oracle进程结构简介

我们经常说数据库实例,实例其实就是指的是数据库的内存结构和进程结构.我们安装数据库软件大量的是在安装其内存和进程组件结构.上篇节我们介绍了oracle内存结构,这节就介绍下oracle进程结构. 首先看下oracle进程的分类: 1)用户进程 是连接到Oracle DB 的应用程序或工具 2)数据库进程 服务器进程:连接到Oracle实例,在用户建立会话时启动 后台进程:在启动Oracle实例时启动 3) 守护程序/应用程序进程 网络监听程序 Gridinfrastructure 守护程序 从进

Oracle内存结构(之三)

[深入解析--eygle] 学习笔记 1.2.3 PGA的管理: [email protected] SQL>show parameter area_size NAME TYPE VALUE ------------------------------------ ---------------------------------------------------- bitmap_merge_area_size integer 1048576 create_bitmap_area_size i

oracle 内存结构详解

Oracle 内存结构 与 Oracle 实例关联的基本内存结构包括: 系统全局区 (SGA):由所有服务器和后台进程共享.SGA 中存储的数据示例包括高速缓存的数据块和共享 SQL 区域. 程序全局区 (PGA):各个服务器进程和后台进程专用,每个进程都有一个 PGA. SGA 是共享内存区,包含实例的数据和控制信息,由以下各项组成: 数据库缓冲区高速缓存:用于缓存从磁盘检索到的数据块 重做日志缓冲区:用于缓存重做信息,直到其可以写入磁盘为止 共享池:用于缓存可在用户间共享的各种结构 大型池:

oracle内存结构(一)

Oracle 内存结构 与Oracle 实例关联的基本内存结构包括: 系统全局区(SGA):由所有服务器进程和后台进程共享 程序全局区(PGA):由每个服务器和后台进程专用,每个进程都有一个PGA. 系统全局区(SGA) 是共享内存区,包含实例的数据和控制信息,由以下各项组成: 数据库缓冲区高速缓存(DB buffer cache):用于缓存从磁盘检索到的数据块 重做日志缓冲区(redo buffer):用于缓存重做信息,直到其可以写入磁盘为止 共享池(share pool):用于缓存可在用户间

oracle内存结构

一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. 二.SGA 包含实例的数据和控制信息,包含如下内存结构: 1)Database buffer cache:缓存了从磁盘上检索的数据块. 2)Redo log buffer:缓存了写到磁盘之前的重做信息. 3)Shared pool:缓存了各用户间可共享的各种结构. 4)Large pool:一个可选

[精]Oracle 内存结构详解

内存结构 现代计算机中,CPU 对内存的访问速度要比从磁盘的速度快千倍,因此 Oracle 对于数据的访问 也尽量都在内存中完成,而不是直接修改硬盘上的数据.内存内容在合适的时候再同步到磁盘. Oracle 利用内存来克服磁盘 IO的束缚,在内存中进行活动越多,系统性能越好,反之,在磁盘上进 行的操作越多,系统性能越差.(原文地址:http://blog.sunansheng.com/2016/04/29/oracle-memory/) Oracle 是一个内存消耗大户,它消耗的内存可以分成两部

Oracle内存结构:SGA PGA UGA

内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区  (System Global Area, SGA): SGA是一组共享内存结构, 被所有的服务和后台进程所共享.当数据库实例启动时,系统全局区内存被自动分配.当数据库实例关闭时,SGA内存被回收. SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素. 查询SGA区的情况: SQL> show SGA T

2、Oracle内存结构

系统全局区(SGA),也叫共享全局区. 1.数据缓冲区(Data Buffer Cache): 用于存储从磁盘数据文件中读取的数据,供所有用户共享.用户修改数据后,修改后的数据先保存在数据库缓冲区中,最后由DBWn进程写入磁盘数据文件. 2.日志缓冲区(Redo Log Buffer Cache): 用于存储数据库的修改操作信息.当日志缓冲区中的日志数据达到一定限度时,由日志写入进程LGWR写入磁盘日志文件. 3.共享池(Shared Pool): 用于保存最近执行的SQL语句.PLSQL程序的

oracle 内存结构 share pool sql解析的过程

1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应的bucket,然后比较bucket里是否存在该SQL语句. 如果不存在,获得shared pool latch,然后在shared pool中的可用chunk链表(也就是bucket)上找到一个可用的chunk,然后释放shared pool latch.在获得了chunk以后,这块chunk就可