导图社区 Oracle体系结构
Oracle体系结构笔记,根据oracle官方文档整理,全面的oracle体系结构知识,非常实用,值得收藏。
编辑于2021-09-01 14:26:31Oracle 体系结构
instance
一个oracle数据库实例是管理database数据文件的内存结构和一组后台进程。(一个实例只打开一个数据库)
内存结构
如果使用数据库配置助手(DBCA)创建数据库并选择基本安装选项,则默认为自动内存管理 oracle 数据库内存管理方式 1、自动内存管理 2、自动共享内存管理(此管理模式是部分自动化的) 3、手动内存管理
SGA 系统全局区
SGA的作用: 1、维护进程和线程公同访问的内存结构; 2、缓存从磁盘读取的数据块; 3、缓冲写入重做日志文件之前的重做数据; 4、存储sql执行计划;
数据库缓冲缓存区(database buffer cache)
作用: 1、优化物理IO,数据库更新缓存中的数据块,并将有关更改的元数据存储在重做日志缓冲区中,commit后,数据库将重做缓冲区写入重做日志,然后dbwr进程将脏块延迟写入磁盘; 2、缓冲经常访问的块(使用DB_FLASH_CACHE_FILE和DB_FLASH_CACHE_SIZE初始化参数来配置多个闪存设备。缓冲区高速缓存跟踪每个设备,并将缓冲区均匀地分配给设备。)
缓冲池 (buffer pool)
数据库缓冲区高速缓存分为一个或多个缓冲区池,这些缓冲区池几乎以相同的方式管理块。
默认池(default pool)
保持池(keep pool)
该池用于经常访问的块,但由于空间不足,这些块已在默认池中过期,保留缓冲池的目的是将对象保留在内存中,从而避免I / O操作
回收池(recycle pool)
该池用于不经常使用的块。回收池可防止对象占用缓存中不必要的空间
缓冲区(flash buffer area )和全表扫描
默认情况下,数据库采用保守的方式进行全表扫描,仅在表大小仅占缓冲区高速缓存的一小部分时才将小表加载到内存中。 对于非常大的表,数据库通常使用直接路径读取,该路径将块直接加载到PGA中并完全绕过SGA,以避免填充缓冲区高速缓存。
数据库缓冲缓存区缓存,各种数据库数据
重做日志缓冲区(redo log buffer)
数据库恢复将重做条目应用于数据文件以重建丢失的更改。 数据库进程将重做条目从用户存储空间复制到SGA中的重做日志缓冲区。重做条目在缓冲区中占据连续的顺序空间。后台进程日志写入器进程(LGWR)将重做日志缓冲区写入磁盘上的活动联机重做日志组
的重做日志缓冲区是在SGA循环缓冲器,其存储重做描述到数据库所做的更改的条目
共享池(share pool)
库缓存(library cache)
sql共享区(share sql area)
数据库使用共享的SQL区域来处理第一次出现的SQL语句,其中包含语句分析树和执行计划; 所有用户都可以访问该区域,其中包含语句分析树和执行计划。 作用;
数据字典缓存(data dictionary cache)
该缓存保存有关数据库对象的信息 所有服务器进程都共享这些缓存,以访问数据字典信息
服务器缓存(server result cache)
服务器结果缓存保存结果集,而不保存数据块。
sql查询缓存(sql query result cache)
SQL查询结果缓存是服务器结果缓存的一个子集,存储查询和查询片断的结果(每当事务修改用于构造该缓存结果的数据库对象的数据或元数据时,数据库都会自动使缓存结果无效。)
pl/sql查询缓存(pl/sql fuction result cache)
PL / SQL函数结果缓存是服务器结果缓存,存储功能的结果集的一个子集; 缓存可以累积许多结果-每个参数值的唯一组合的一个结果,调用每个结果缓存的函数都使用该结果。如果数据库需要更多的内存,则它将过期一个或多个缓存的结果。
保留池(reserved pool)
Java,PL / SQL或SQL游标可能会在共享池之外进行大于5 KB的分配。为了使这些分配最有效地进行,数据库为保留池隔离了少量共享池。 该保留的池是在共享池中Oracle数据库可用于分配的存储大的连续组块的存储区域, 数据库从共享池中分块分配内存。分块允许将大型对象(超过5 KB)加载到缓存中,而无需单个连续区域。这样,数据库减少了由于碎片而耗尽连续内存的可能性。
共享池缓存各种类型的程序数据
大池(lager pool)
主要用途就是供RMAN备份和共享连接模式 大池不同于共享池中的保留空间,共享池中的保留空间与从共享池分配的其他内存使用相同的LRU列表。大型池没有LRU列表。内存已分配,在使用完之前无法释放。一旦释放了一块内存,其他进程便可以使用它。
延迟插入缓冲(MEMOPTIMIZE FOR WRITE)
java 池(java pool)
用于存储Java虚拟机(JVM)内的所有会话特定的Java代码和数据。此内存包括Java对象,这些对象在呼叫结束时迁移到Java会话空间
固定池(fixed pool)
SGA的大小由Oracle数据库设置,无法手动更改。固定的SGA大小可以因版本而异
有关数据库和实例状态的常规信息,后台进程需要访问这些信息
进程之间传递的信息,例如有关锁的信息
内存区 (In-Memory area) 可选
优化池(memoptimize pool)可选
UGA 用户全局区
UGA是会话内存,是为会话变量分配的内存,例如登录信息以及数据库会话所需的其他信息。本质上,UGA存储会话状态
session varivable
olap pool
PGA 私有全局区
PGA是私有于进程和线程的内存区域,不共享; PGA的类比是文件文员使用的临时台面工作区
专用 sql区
一个私有SQL区保存有关解析的SQL语句以及处理其他特定会话的信息。 当服务器进程执行SQL或PL / SQL代码时,该进程使用专用SQL区域存储绑定变量值,查询执行状态信息和查询执行工作区。 客户端进程负责管理私有SQL区域,分配的专用SQL区域的数量受初始化参数的限制OPEN_CURSORS
sql工作区
一个工作区是用于内存密集型操作PGA内存的私人分配,用来排序哈希运算,位图合并
软件代码区(Software Code Areas)
软件代码区是内存的一部分,用于存储正在运行或可以运行的代码
进程结构
服务器进程
Oracle数据库创建服务器进程来处理连接到该实例的客户端进程的请求。客户端进程始终通过单独的服务器进程与数据库通信。 作用: 解析并运行通过应用程序发布的SQL语句,包括创建和执行查询计划 执行PL / SQL代码 将数据文件中的数据块读入数据库缓冲区高速缓存(DBW后台进程的任务是将修改后的块写回到磁盘) 返回结果的方式使应用程序可以处理信息
专有服务器进程概述
在专用服务器连接中,客户端连接仅与一个服务器进程关联。 服务器进程在其PGA中存储特定于进程的信息和UGA
共享服务器进程概述
第一个可用的共享服务器进程从队列中获取请求并进行处理。之后,共享服务器将结果放入调度程序响应队列中。分派器进程监视此队列,并将结果发送到客户端。 像专用服务器进程一样,共享服务器进程也有自己的PGA。但是,会话的UGA在SGA中,因此任何共享服务器都可以访问会话数据。 在共享服务器连接中,客户端应用程序通过网络连接到调度程序进程,调度程序进程从连接的客户端接收请求,并将其放入大型池的请求队列中
后台进程
强制后台进程
进程监控进程(PMON)组
这些进程负责监视和清除其他进程, 数据库必须确保释放已终止进程所拥有的资源, 以便其他进程可以使用它们 【数据库资源隔离,PMON组可以自动隔离损坏的不可恢复的资源,以便不会立即强制终止数据库实例。PMON组继续对保存隔离资源的进程或会话执行尽可能多的清除。】
PMON 进程监控进程
1、检测其他后台进程的终止 2、执行异常终止的后台进程恢复
CLMN 清理主要进程
CLMN会定期清除终止的进程,终止的会话,事务,网络连接,空闲会话, 分离的事务以及已超过其空闲超时的分离的网络连接。
CLnn 清理辅助进程
CLMN将清理工作委托给CL nn协助清理进程。辅助进程的数量与要完成的清理工作量和当前的清理效率成正比。
进程管理器(PMAN)
PMAN监视,产生并停止以下类型的过程 1、分派器和共享服务器进程 2、数据库驻留连接池的连接代理和池化服务器进程 3、作业队列流程 4、可重启后台程序
监听器注册进程(LRGE)
监听器登记处理(LREG)有关数据库实例和调度程序进程与Oracle网络监听信息。
系统进程监控进程(SMON)
系统监视处理(SMON)是负责各种系统级清理职责。 1、必要时在实例启动时执行实例恢复。 2、恢复由于文件读取或表空间脱机错误而在实例恢复期间跳过的终止事务。 3、清理未使用的临时段。 4、在字典管理的表空间内合并连续的自由范围
数据库写进程(DBWn)
DBW进程将数据库缓冲区高速缓存中的已修改缓冲区写入磁盘。(数据量大时会增加进程数DBW0~DBW99)。 在以下情况下,DBW进程将脏缓冲区写入磁盘: 1、当服务器进程在扫描阈值数量的缓冲区后无法找到干净的可重用缓冲区时,它会向DBW发出写信号。 2、DBW定期写入缓冲区以推进检查点,检查点是重做线程中从其开始实例恢复的位置。
日志写入进程(LGWR)
如果无法访问日志文件,则LGWR继续写入组中的其他文件,并将错误写入LGWR跟踪文件和警报日志。如果组中的所有文件都已损坏,或者该组由于尚未归档而无法使用,则LGWR无法继续运行 日志写进程(LGWR)管理联机重做日志缓冲区。 在以下情况下,LGWR将自上次写入以来已复制到缓冲区的所有重做条目写入: 1、用户提交交易。 2、发生联机重做日志切换。 3、自LGWR上次写信以来已经过去了三秒钟。 4、重做日志缓冲区已满三分之一,或包含1 MB的缓冲数据。 5、DBW必须将修改后的缓冲区写入磁盘。
检查点进程(CKPT)
检查点进程(CKPT)更新控制文件和数据文件头与检查点信息和DBW到写入块到磁盘的信号。 检查点信息包括检查点位置,SCN和联机重做日志中开始恢复的位置。
管理信息的采集进程组(MMON)(MMNL)
MMON 管理监控进程
管理监控进程(MMON)执行相关的许多任务自动工作负载(AWR)
MMNL 管理监控精简进程
可管理性监控精简进程(MMNL)将来自SGA中活动会话历史记录(ASH)缓冲区的统计信息写入磁盘。当ASH缓冲区已满时,MMNL写入磁盘
恢复进程(RECO)
在分布式数据库中,恢复程序(RECO)自动解决分布式事务中的故障。
可选后台进程
归档进程(ARCn)
一个归档进程程序(ARCn)副本联机重做日志文件到离线存储重做日志切换发生后。 这些过程还可以收集事务重做数据并将其传输到备用数据库目标。仅当数据库处于ARCHIVELOG模式并且启用自动归档时,ARC n进程才存在。
作业队列进程组(CJQ0)(Jnnn)
动态作业队列进程可以在给定的时间间隔内同时运行许多作业,: 1、Oracle Scheduler会根据需要自动启动和停止作业协调器进程(CJQ0)。 协调器进程会定期从系统JOB$表中选择需要运行的作业。选择的新作业按时间排序。 2、协调器进程动态生成作业队列从属进程(Jnnn)以运行作业。 3、作业队列进程运行CJQ0进程选择要执行的作业之一。每个作业队列进程一次运行一个作业,直到完成 4、该过程完成单个作业的执行后,将轮询更多作业。如果没有计划执行的作业,则它将进入睡眠状态,从睡眠状态开始,它会定期唤醒并轮询更多的作业。如果该进程未找到任何新作业,则它将在预设间隔后终止。
闪回数据存档进程(FBDA)
空间管理协调进程 (SMCO)
SMCO流程协调各种与空间管理相关的任务的执行。 典型的任务包括主动空间分配和空间回收。SMCO动态产生从属进程(W nnn)以执行任务。
从属进程
I/O从属进程(Innn)
I / O从属进程(Innn)为不支持异步I/O的系统和设备模拟异步I / O, 异步I / O中,传输没有时序要求,从而使其他进程可以在传输完成之前启动 数据库支持不同类型的I / O从站,包括: 1、Recovery Manager(RMAN)的I / O从属 使用RMAN备份或还原数据时,可以将I / O从属设备同时用于磁盘和磁带设备。 2、如果使用多个数据库编写器进程不切实际(例如,当计算机只有一个CPU时), 则数据库可以在多个从属进程上分配I / O。DBW是唯一扫描缓冲区高速缓存LRU列表以查找要写入磁盘的块的进程。但是,I / O从属为这些块执行I / O。
并行执行服务器进程(PX)
并行执行中,多个进程同时运行以运行单个SQL语句。 通过在多个进程之间划分工作,Oracle数据库可以更快地运行该语句。
查询协调器
在并行执行中服务器进程充当查询协调器(也称为并行执行协调器) 负责以下工作: 1、解析查询 2、分配和控制并行执行服务器进程 3、将输出发送给用户
生产和使用
生产者负责处理其数据,然后将其分发给需要它的使用者
database
物理存储结构
Oracle数据库是一组将Oracle数据存储在永久性磁盘存储中的文件。
自动存储管理(ASM)
此章节单独一个思维导图
操作系统文件系统
数据文件
数据文件的结构
Oracle数据库通过分配指定数量的磁盘空间以及数据文件头的开销来为表空间创建数据文件。
数据文件头
数据文件头包含有关数据文件的元数据,例如其大小和检查点 SCN。 每个标头包含一个绝对文件号和一个相对文件号, 该绝对文件号唯一地标识数据库内的数据文件,而相对文件号唯一地标识表空间内的数据文件。
永久和临时数据文件
永久表空间包含持久模式对象
临时表空间只包含一个会话的持续时间模式对象
本地管理的临时表空间具有临时文件(临时文件), 这些临时文件是专用于以散列,排序和其他操作存储数据的特殊文件。 当内存中没有足够的空间时,临时文件也会存储结果集数据。
在线和离线数据文件
您可以使用该ALTER DATABASE MOVE DATAFILE语句,实现以下目标: 1、将表空间从一种存储移动到另一种 2、将不常访问的数据文件移动到成本较低的存储中 3、使表空间为只读,并将其数据文件移动到一次写入存储,例如一次写入多次读取(WORM)驱动器 4、将数据库移至Oracle ASM 每个数据文件都是联机(可用)或脱机(不可用)的。通过使单个数据文件或临时文件脱机或联机来更改其可用性。数据库必须脱机才能访问脱机数据文件。
您可能使数据文件脱机,包括执行脱机备份或阻止损坏。(手动脱机)
如果数据库无法写入数据文件,数据库将自动使数据文件脱机。(自动脱机)
控制文件
重做日志文件
重做日志文件是有关数据库活动的历史信息的有用来源。 服务器进程将每个事务同步写入重做日志缓冲区,然后LGWR进程将其写入在线重做日志。 联机重做日志的内容包括未提交的事务以及模式和对象管理语句。 当数据库对撤消段进行更改时,数据库还将这些更改写入在线重做日志。
联机重做日志多个副本
Oracle数据库可以在单独的位置自动维护两个或更多个相同的联机重做日志副本。 一个联机重做日志组由一个联机重做日志文件和它的冗余副本。 维护在线重做日志组的多个成员可以防止丢失重做日志。
联机重做日志结构
联机重做日志文件包含重做记录。重做记录由一组更改向量组成,每个更改向量都描述了对数据块的更改。重做记录具有与更改相关的所有相关元数据,包括以下内容: 1、SCN和更改的时间戳 2、产生变更的交易的交易ID 3、事务提交时的SCN和时间戳(如果已提交) 4、进行更改的操作类型 5、修改后的数据段的名称和类型
归档联机重做日志
归档重做日志文件是一个联机重做日志组的成员填写的副本,归档日志文件可以用来: 1、恢复数据库备份 2、更新备用数据库(DG) 3、使用Oracle LogMiner实用程序获取有关数据库历史记录的信息
集群文件系统
逻辑存储结构
表空间
数据段
数据区
数据块
Oracle数据库以一个称为数据块(也称为Oracle块或页)的单元管理数据库数据文件中的逻辑存储空间。数据块是数据库I / O的最小单位。 Oracle块是一种逻辑存储结构,其大小和结构对于操作系统是未知的。
操作系统块
在物理级别,数据库数据存储在由操作系统块组成的磁盘文件中。 操作系统块是操作系统可以读取或写入的最小单元 在数据库创建时参数“DB_BLOCK_SIZE”设置数据库大小,除非通过重新创建数据库,否则无法更改数据库块大小。 如果数据块和操作系统块的大小不同,则数据块大小必须是操作系统块大小的倍数。
操作系统块
操作系统块
操作系统块
数据区
数据块
可以创建单独的表空间块大小与DB_BLOCK_SIZE不同,用来迁移到不同的数据库
数据段
数据区
数据块
数据块格式
每个数据块都有一种格式或内部结构,使数据库能够跟踪数据和块中的可用空间。
块开销
块头
这部分包含有关块的常规信息,包括磁盘地址和段类型。
表目录
对于按堆组织的表,此目录包含有关表的元数据,这些表的行存储在此块中。在一个表集群中,多个表可以在同一块中存储行。
行目录
行数据
数据区
数据块
数据段
数据区
数据块
数据区
数据块
Oracle数据库必须使用逻辑空间管理来跟踪和分配表空间中的扩展数据块。
逻辑空间管理
本地管理表空间
本地管理的表空间在数据文件头中维护一个位图,以跟踪数据文件主体中的可用空间和已用空间。 每一位对应一组块。分配或释放空间后,Oracle数据库将更改位图值以反映块的新状态。
自动段空间管理
自动段空间管理(ASSM)方法使用位图在表空间管理空间。 ASSM效率更高,它是永久性本地管理表空间的默认设置。
手动段空间管理
手动段空间管理(MSSM)方法使用称为空闲列表的链接列表来管理段中的可用空间。 对于具有可用空间的数据库对象,可用列表跟踪高水位标记(HWM)(HWM)下的块, 高水位标记是已使用和尚未使用的段空间之间的分界线。使用块时,数据库会根据需要将块放入或从空闲列表中删除块。一个对象可能有多个空闲列表。这样,在一个表上执行DML的多个会话可以使用不同的列表,这可以减少争用。每个数据库会话在其会话期间仅使用一个空闲列表。
字典管理表空间
字典管理的表空间使用数据字典来管理其区的分配。每当扩展区被分配或释放以供重用时,Oracle数据库都会更新数据字典中的表。 如果数据库找到空间,则它将修改一个数据字典表,并在另一表中插入一行。这样,数据库通过修改和移动数据来管理空间。