一、概述
数据库在运行的时候,与JVM的堆划分为不同的逻辑区域类似,Oracle会把占用的内存逻辑的划分成几个区域:用户全局区、进程全局区和系统全局区。
顺便我们看看架构视图中的运行架构:描述软件系统运行期质量属性,如性能、可伸缩性、持续可用性等。运行架构关注进程、线程、对象、内存等运行时概念,以及相关的并发、同步、通信等问题。我们要描述的内存结构和进程部分算是运行架构的一部分。
二、用户全局区UGA
存储用户会话相关信息的区域,也存储查询结果集。在使用专用服务器连接时,UGA是PGA的一部分;在使用共享服务器连接时,UGA是SGA的一部分。
三、进程全局区PGA
进程私有的内存区域,别的进程访问不到。
查询时候在内存中的排序和hash都是在PGA中进行的,而操作的结果集是要放入到UGA中的。
SORT_AREA_SIZE和HASH_AREA_SIZE是每个游标的排序和hash内存大小,一个查询可能有多个游标,所以一个查询可能占用了多个SORT_AREA_SIZE的内存。数据库会把相关区域保持在参数值以下,超过这个区域大小的数据会放入到临时表空间。
SORT_AREA_RETAIN_SIZE是查询结果集占用的内存大小,影响着PGA的大小。超过该大小的数据部分会放入临时表空间。测试三个参数的实例?
由于HASH_AREA_SIZE/SORT_AREA_SIZE/BITMAP_MERGE_AREA_SIZE是一个游标占用的内存空间大小,100个、1000个的时候还是导致内存不可控,而只有几个的时候又导致内存利用率低,所以引入了自动内存管理。在自动内存管理的时候,不需要设置这些参数,系统会自己根据运行时情况自动调节。
可以通过WORKAREA_SIZE_POLICY来设置排序、hash区域是自动管理还是手动管理;通过PGA_AGGREGATE_TARGET设置PGA总内存大小,这是一个内存使用上限,当然并不是一定不会超过。
四、系统全局区SGA
数据库进程共享的内存区域,每个进程都或多或少的访问到该区域中的数据。
又可划分为:
a、共享池,缓存一些比较小的共享数据的内存区域,如游标、数据字典等。
b、大池,存放一些占用大块内存的对象,如用户全局区、RMAN备份时候的数据缓冲、并行执行时候的消息缓存等,这些对象结构比较大,被重用的可能性也比较低。
c、Java池,数据库中jvm运行时候占用的内存区域,存放些java程序创建的对象,如java类的共享部分;uga中保存会话状态的部分。
d、流池,用作缓存流进程在数据库间移动或复制数据时候使用的队列消息,如果内存队列满则会写入到磁盘。
e、Null池,包括固定SGA、块缓冲区和重做日志缓冲区。
固定SGA是安装时编译到Oracle二进制可执行文件本身当中的一个组件,其记录了一组指向SGA其他组件的变量,还又一些参数。
重做日志缓冲区是缓存重做日志的区域,LOG_BUFFER可以设置其大小。
块缓冲区缓存,每次读取或修改据库块都要先读入到内存中,然后再做后续操作,如查找某一行,修改等。块缓冲区根据块被访问的频繁程度分为默认池、保持池和回收池;所有段块都会加载到默认池,非常频繁访问的数据会放入到保持池;访问很随机的大段会放到回收池。修改数据时,如果要修改后再写回磁盘;但是并不是每写一块数据就立刻写会磁盘,而是会缓冲到块缓冲区,等到一定数量后才回写。
可以启用自动sga内存管理,通过memory_target和sga_target设置。其中memroy_target表示sga和pga占用的内存总量上限。oracle会根据工作负载历史自动确定适当的sga大小和适当的pga大小。过一段时间后,随着数据库中完成的工作负载的变化,sga和pga的分配也会变化。
分享到:
相关推荐
Oracle数据库的内存结构和进程结构是其高效运行的关键组成部分。Oracle实例是用户访问数据库的核心途径,它由系统全局区(SGA)和一系列后台进程组成。在操作系统层面,实例通过ORACLE_SID标识,而在Oracle数据库...
Oracle数据库的内存结构和进程结构是其核心组成部分,它们直接影响着数据库的性能和稳定性。本文将深入探讨这两个关键概念。 首先,Oracle实例是用户访问数据库的桥梁,它由内存结构和进程结构共同组成。实例通过...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...
Oracle数据库是一个复杂而强大的关系型数据库管理系统,其内存结构和进程结构对于理解和优化数据库性能至关重要。在Oracle中,实例(Instance)是访问数据库的关键途径,它由内存结构和进程结构两大部分组成。 1. ...
Oracle数据库是一个复杂的系统,它的核心组成部分包括内存结构和进程结构。在深入探讨这两个概念之前,我们先来理解一下实例(Instance)的概念。实例是Oracle数据库运行的基础,它是由内存区域(System Global Area...
Oracle 11g的内存结构主要分为两大部分:系统全局区(SGA)和个人全局区(PGA)。 1. **系统全局区(SGA)**: - SGA是被多个用户进程共享的一块内存区域,主要包括以下几个部分: - **Java池**:用于存储Java...
Oracle数据库实例是内存结构和后台进程的集合,负责处理数据库的请求。这些进程包括系统监控进程(SMON)、进程监控进程(PMON)、检查点进程(CKPT)等,它们共同协作以确保数据库的正常运行。 **数据字典**是...
综上所述,Oracle数据库的体系结构是一个复杂而精细的设计,涵盖了内存管理、进程交互、文件存储和恢复机制等多个方面,这些都为Oracle提供了强大的功能和高度的可扩展性。理解这些基本概念对于管理和维护Oracle...
Oracle数据库体系结构主要由以下几部分构成:Oracle数据库服务器、Oracle实例、Oracle数据库的物理结构和Oracle数据库的逻辑结构。接下来我们将详细探讨这些组成部分。 Oracle数据库服务器是指运行Oracle数据库软件...
Oracle实例是用户与数据库交互的桥梁,由统一的内存结构(包括系统全局区SGA、程序全局区PGA和用户全局区UGA)以及一系列后台进程组成。这些内存区域和进程共同构成了Oracle实例。 系统全局区(SGA)是Oracle数据库...
3. **Oracle数据库体系结构**(Oracle系列培训教程之四:数据库体系结构.doc):这章节将详细阐述Oracle数据库的物理和逻辑存储结构,如数据文件、控制文件、重做日志文件、表空间、段、区等,以及这些组件如何协同...
Oracle实例由SGA和后台进程组成,是运行数据库时的内存和进程结构。 Oracle数据库的体系结构非常复杂,本总结只是对其中的一些关键概念和组件进行了概述。实际上,每个部分都可以展开深入讨论,并涵盖更多的细节。...
4. 可选的内存结构:Java池用于存储Java代码,大型共享池用于存储大型内存结构。 后台进程则是Oracle实例的另一重要组成部分,它们负责数据库的管理和维护工作。常见的后台进程包括: 1. 数据库写入程序(DBWn):将...
Oracle 的基本体系结构主要包括内存结构、进程结构以及存储结构。 #### 二、内存结构详解 Oracle 的内存结构主要由 PGA (Program Global Area) 和 SGA (System Global Area) 组成。 ##### PGA - 私有内存 - **...
当Oracle实例启动时,它会分配一系列内存区域,并启动若干后台进程。这些内存区域主要用于存储以下几类信息: - **程序代码**:运行数据库必需的程序代码。 - **会话信息**:存储每个已连接会话的相关信息,无论...
Oracle数据库的体系结构是其高效稳定运行的基础,涵盖了物理结构、逻辑结构、内存结构、数据库实例与进程以及数据字典等多个重要组成部分。本章主要围绕这些方面展开详细讲解。 首先,Oracle的物理结构主要包括数据...
- **后台进程**: Oracle启动时自动创建的一系列操作系统进程,负责监控、维护和恢复数据库等任务。 **3. Oracle的文件结构** - **存储结构**: - **物理结构**: 依赖于操作系统平台。 - **逻辑结构**: 与操作系统...
首先,Oracle实例是Oracle数据库运行时的核心,它由内存结构和后台进程组成。实例与数据库密切相关,但它们是两个独立的概念。数据库是物理文件的集合,包括数据文件、控制文件、重做日志文件等,这些文件存储了...