Oracle 内存结构
Oracle的3个主要的内存结构:
-
系统全局区 (System Global Area, SGA):这是一个很大的共享内存段,几乎所有的Oracle进程都要访问这个区 域
-
进程全局区 (Porcess Global Area, PGA):这是一个进程或线程专有的内存,其他的进程/线程不能访问。
-
用户全局区 (User Global Area, UGA):这个区域与特定的会话相关联。它可能在SGA中分配,也可能在PGA中分配,取决于是用专用服务器还是共享服务器来连接数据库。如果使用专用服务器,UGA在PGA中分配,如果使用共享服务器,UGA在SGA中分配。
PGA是特定于进程的一段内存。这是一个操作系统或线程专用的内存,不允许系统中的其他线程或进程访问。PGA绝对不会在Oracle的SGA中分配,而总是在进程或线程在本地分配。
UGA就是你的会话状态。会话总能访问这部分内存。
SGA是一组共享的内存结构,被所有服务器进程和后台进程使用,所以也叫全局共享区。
它由以下部分构成:数据库高速缓冲区、日志缓冲区、共享池、JAVA池、大池和流池。它的最大尺寸由SGA_MAX_SIZE控制。
数据高速缓冲区(Database Buffer Cache):用于存放从数据文件读取的数据块,由初始化参数db_catch_size决定。buffer cache可以分成Default 、Keep和Recycle三个部分。Keep池存放持久存放的数据,Recycle池存放经常一次性使用的数据,而Default池一般用于当数据不指定存在在前2者的时候的存放地,一般我们的表都是存放于Default池的。除非你在建表的时候指定 Store(buffer_pool keep) or Store(buffer_pool recycle)。他们的大小由db_keep_cache_size 和db_recycle_cache_size参数指定。
在管理buffer cache的时候,一般使用2个列表--LRU LIST 和 Dirty LIST (write list 或者CheckPoint Queue)。各种List上面存放的是指向实际buffer的指针。一般读取的数据时存放在 LRU list上的,修改过后的数据被标识为Dirty,被转移到Dirty List上,并且会被DBWR写到数据文件中。
模拟下oracle进程使用高速缓冲区的过程:一个sql语句发过来,首先在高速缓冲区的LRU LIST面寻找有没要的数据,如果找到了,直接返回;反之,就需要把数据从数据文件写入到高速缓冲区中的LRU LIST。首先在LRU里面寻找有没free buffer的空间,如果有,直接把数据从数据文件写入到高速缓冲区的LRU LIST 指定的buffer里面,同时它还会将扫描到的修改过的buffer移动到Dirty List里面。如果扫描LRU超过一个阈值,一般为40%还没找到足够的free buffer,就要通知DBWR把dirty list里面指向的buffer写到数据文件里面,腾出空间给LRU LIST,然后把数据填到刚新增的free buffers里。 这里可以看出,如果你的高速缓冲区很小的,不停地写写,造成很大I/O开销。
日志缓冲区(Redo Log Buffer): 用于存放日志条目,日志条目就是记录对数据的改变。当这块区域用光时,后台进程LGWR把日志条目写到磁盘上的联机日志文件中。它由初始化参数log_buffer决定大小。同样的道理下,日志缓冲区应该稍微大点,特别是有长时间运行的事务的时候,可以大量减少I/O。
共享池(Shared Pool):用于存放SQL语句、PL/SQL代码、数据字典、资源锁和其他控制信息。它由初始化参数SHARED_POOL_SIZE控制其大小。
它包含以下几个缓冲区:
库缓冲区(Library Cache):存放解析并且执行过的SQL和PL/SQL代码。可以用于共享解析树和执行计划,加快语句执行速度。共享SQL区:存放SQL语句的解析树和执行计划;私有SQL区:这部分存放的东西只被会话私有,一般包含一些变量,会话参数等。数据字典缓冲区(Data Dictionary Cache):存放一些被频繁访问的数据字典信息,防止过多对系统表空间进行访问。以行的形式存放数据,所以又叫行存储区。
大池(Large Pool):一般用于数据库的备份和恢复、并行查询、共享服务器模式下的会话内存。不建立大池,所需要的内容要从共享池或者PGA内获取。它由初始化参数large_pool_size控制.
JAVA池(JAVA Pool):用于支持在数据库中运行java代码,一般由java_pool_size控制。
流池(Stream Pool):加强对流的支持,一般由stream_pool_size控制。
查询SGA区的情况:
1.show SGA
2.select * from v$sga
NAME VALUE
-------------------- ----------
Fixed Size 1249488
Variable Size 159387440
Database Buffers 281018368
Redo Buffers 7135232
这里的Fixed Size表示固定区域,存储SGA各个组件的信息。不能修改大小。
Variable Size表示可变区域,比如共享池、java池、大池等。‘
Database Buffers表示数据库高速缓冲区。
Redo Buffers表示日志缓冲区。
分享到:
相关推荐
Oracle内存结构是数据库性能优化的关键因素,它主要分为两大部分:共享内存(SGA)和进程私有内存(PGA及UGA)。理解这些组件的工作原理对于优化Oracle数据库的性能至关重要。 1. SGA(System Global Area) SGA是...
绝对的值得一看的文档,全都是我收集的,oracle的内存结构,有想研究内存结构的可以看一下啊
### ORACLE内存结构与表空间知识 #### 一、Oracle的服务方式 Oracle提供了三种不同的服务方式,每种方式都有其特定的应用场景和内存管理特点。 ##### 1. 专用服务器 (Dedicated Server) - **服务流程**:当...
总的来说,Oracle内存结构与实例管理涉及到多个层面,包括内存分配策略、各内存区域的使用以及后台进程的协同工作。深入理解和优化这些方面,对于提升数据库性能和保证服务稳定性具有不可忽视的作用。
oracle的内存结构,希望对大家有帮助
#### 一、Oracle内存结构简介 Oracle数据库的内存结构主要由SGA和PGA两部分组成: 1. **SGA**(Shared Global Area):SGA是所有数据库进程共享的一块内存区域,它包含了多个子组件如数据缓冲区、重做日志缓冲区、...
Oracle数据库的内存结构是其性能的关键因素,主要分为系统全局区...总的来说,Oracle内存性能的优化是一个持续的过程,需要根据系统的实际运行情况,结合监控数据,不断调整和优化内存结构,以实现最佳的数据库性能。
Oracle数据库的内存结构主要包括两种主要区域:System Global Area (SGA) 和 Program Global Area (PGA)。SGA 是一个共享的内存区域,而PGA 是每个服务器进程私有的内存区域。 **System Global Area (SGA)** SGA ...
总之,"Oracle内存资源分配"是一个涉及多方面知识的复杂主题,需要深入理解Oracle内存结构,熟悉各种内存参数,以及具备一定的性能监控和调优技巧。通过合理的内存分配,我们可以最大化数据库性能,满足业务需求,...
本文将深入探讨Oracle内存结构,包括SGA(System Global Area)和PGA(Program Global Area),以及如何进行全面的内存分析。 一、Oracle内存架构 1. SGA(系统全局区) SGA是Oracle数据库运行时共享的一片内存...
Oracle 12c数据库体系结构图文详解手册是 Oracle 12c数据库管理系统的核心组件之一,该手册详细介绍了 Oracle 12c数据库的体系结构、实例、数据库、内存结构、后台进程、控制文件、重做日志文件、数据文件等概念。...
Oracle内存结构主要分为两大部分:SGA(System Global Area)和PGA(Program Global Area)。SGA是数据库进程共享的一块内存区域,而PGA则是每个单独数据库进程的私有内存空间。 1. SGA(系统全局区) - 数据缓冲...
当数据库启动时,系统会在服务器内存中分配系统全局区(SGA),这是Oracle内存结构的基础。接着,一系列常驻内存的后台进程会被启动,共同构成了Oracle的进程结构。这些内存区域和后台进程一起构成实例,每个实例...
Oracle数据库是全球广泛使用的...通过理解Oracle内存结构,结合实际工作负载,合理调整内存分配,可以显著提升Oracle数据库的运行效率和稳定性。在实际操作中,应根据具体环境和需求,综合运用各种方法来优化内存配置。
在Oracle内存结构中,主要分为两大类:共享内存(SGA,System Global Area)和进程专用内存(PGA,Program Global Area)。这两部分共同构成了Oracle实例的内存环境。 #### 1. 共享内存(SGA) SGA是Oracle实例的...
Oracle内存结构主要分为两个主要部分:SGA(System Global Area)和PGA(Program Global Area)。以下将详细介绍这两个区域及其组成部分。 **1. SGA(System Global Area)系统全局区** SGA是一个共享内存区域,...
##### 3.2 Oracle内存结构 Oracle数据库的内存结构主要由以下部分组成: 1. **系统全局区(SGA)**:SGA是所有服务器进程和后台进程共享的一个内存区域,用于存储数据库的控制信息和数据。 - **数据库缓冲区高速...
Oracle内存主要分为SGA、PGA、排序池、大池和Java池。 3. 系统全局区SGA: SGA是所有数据库实例共享的内存区域,包括数据缓冲区、日志缓冲区和共享池等组件。SGA的大小在数据库启动时设定,并在关闭时释放。尽管...