Oracle数据库进程体系结构概述
Oracle数据库进程体系结构概述Oracle属于多进程体系架构它由多个后台进程组成每个后台进程完成特定的维护任务进程之间互相协助最终共同完成数据库所需的维护任务。本文讲述的内容1、进程类型 2、Oracle两种服务客户端进程的模式 3、客户端进程概述 4、连接和会话 5、服务器进程概述 6、后台进程概述 1强制性后台进程 进程监视进程 (PMON) 监听器注册 (LREG) 系统监视进程(SMON) 数据库写入进程(DBWn) 日志写入进程(LGWR) 检查点进程(CKPT) 可管理性监视进程(MMON and MMNL) 恢复进程(RECO) 2可选后台进程 归档进程 作业队列进程 CJQ0 和 Jnnn 恢复写进程(RVWR) 闪回数据存档进程 FBDA 空间管理协调进程 (SMCO) 调度器进程(Dnnn) 和共享服务进程 (Snnn) 3从属进程 I/O 从属进程 并行查询从属进程进程类型客户端进程运行应用程序或 Oracle 工具。Oracle进程运行 Oracle 数据库代码包括下列子类型1、后台进程与数据库实例同时启动并执行一些维护任务如执行实例恢复、清理进程、将重做缓冲区写入磁盘等。2、服务器进程基于客户端请求执行相应的工作。例如这些进程解析 SQL 查询、将查询放入共享池、为查询创建并执行查询计划、将数据从数据库缓冲区高速缓存或从磁盘读入缓冲区。3、从属进程为后台进程或服务器进程执行额外任务。Oracle两种服务客户端进程的模式专用服务器进程一个客户端进程由一个专用的服务器进程来服务11专用服务。对于专用服务器连接客户端连接与一个且仅与一个服务器进程相关联。在 Linux 上连接到一个数据库实例的 20 个客户端进程有相应的 20 个服务器进程为其提供服务。每个客户端进程直接与其服务器进程进行通信。在会话期间此服务器进程专用于其客户端进程。服务器进程将特定于进程的信息和 UGA 存储在其PGA 中共享服务器进程多个客户端进程由一个专用的服务器进程来服务N1专用服务。对于共享服务器连接客户端应用程序通过网络连接到一个调度器进程而不是一个服务器进程。例如 20 个客户端进程可能会仅连接到一个单一的调度器进程。调度器进程接收来自已连接客户端的请求并将它们放入大池中的请求队列。第一个可用的共享服务器进程从队列承接一个请求并处理。处理完毕后共享服务器进程将结果放回调度器响应队列。调度器进程会监视此队列并将结果传回客户端。与专用服务器进程类似共享服务器进程也有其自己的 PGA。但是会话的 UGA 位于 SGA 中以便任何共享服务器进程可以访问其中的会话数据。客户端进程概述当用户运行一个应用程序如 ProC 程序或 SQLPlus时操作系统会创建一个客户端进程 有时称为用户进程来运行用户应用程序。客户端应用程序具包含链接到Oracle 的库文件和数据库进行通信所需的 API。连接和会话连接是在客户端进程和数据库实例之间的一条物理通信路径。通信路径使用可用的进程间通信机制或网络软件来建立。通常连接在客户端进程和服务器进程或调度器进程之间产生。也可以其他方式例如与Oracle 连接管理器产生这里不讨论。会话是数据库实例内存中的一个逻辑实体表示登录到数据库的某个当前用户的状态。例如当用户使用密码通过了数据库身份验证时会为此用户建立一个会话。会话的持续时间从用户通过数据库验证开始直到用户断开连接或退出数据库应用程序。在单个连接之上可以建立 0 个、 1 个、或多个会话。这些会话相互独立一个会话中的事务提交并不会影响其他会话中的事务。例如在一个会话中生成一个 SQL 语句执行统计信息的自动跟踪会在一个连接中创建两个会话。服务器进程概述Oracle 数据库创建服务器进程以处理连接到实例的客户端进程的请求。客户端进程总是通过单独的服务器进程与数据库进行通信。服务器进程可以执行一个或多个下列任务1、解析并运行通过应用程序发出的 SQL 语句包括创建和执行查询计划2、执行 PL/SQL 代码3、将数据块从数据文件读入数据库缓冲区高速缓存 将已修改的块写回磁盘是 DBWn 后台进程的任务4、返回结果信息以便应用程序可以进一步处理后台进程概述多进程 Oracle 数据库会使用某些后台进程跟随实例一起启动。这些后台进程执行操作数据库所需的维护任务同时多用户同时访问和操作下最大化数据库的性能。每个后台进程都有其单独的任务但又与其他进程相互协作。例如 LGWR 进程将重做日志缓冲区中的数据写入到联机重做日志。当已填充的日志文件将被存档时 LGWR 通知另一个进程来归档该文件。数据库实例启动时Oracle 数据库将自动创建后台进程。实例可能会有许多后台进程但并不是所有这些进程在每种数据库配置中都存在。三类后台进程强制性后台进程可选后台进程从属进程强制性后台进程简单理解为数据库启动所必须存在的进程。包含如下进程监视进程 (PMON)监听器注册 (LREG)系统监视进程(SMON)数据库写入进程(DBWn)日志写入进程(LGWR)检查点进程(CKPT)可管理性监视进程(MMON and MMNL)恢复进程(RECO)进程监视进程 PMON进程监视器 PMON 监视其他的后台进程并在某个服务进程或调度进程异常终止时执行进程恢复。PMON 负责清理数据库缓冲区高速缓存并释放客户端进程以前还在使用的资源。例如 PMON 重置活动事务表的状态、 释放不再需要的锁、并从活动进程列表中删除其进程 ID。监听注册进程 (LREG)12版本引入替PMON分担了注册信息到监听器的工作以前版本这个工作由PMON完成负责将实例和调度进程的信息注册到 Oracle 网络监听器。当实例启动时 LREG 轮询监听器以确定它是否正在运行。如果监听器正在运行则 LREG将有关参数传递给它。如果监听器未运行则 LREG 定期尝试联系它。系统监视进程 SMON系统监视进程 SMON 负责各种系统级清理职责。分配给 SMON 的职责包括如有必要在实例启动时执行实例恢复。在 Oracle RAC 数据库中一个数据库实例的 SMON 进程可以为另一个失败的实例执行实例恢复。在实例恢复期间由于读文件或表空间脱机错误而跳过的已终止事务由 SMON 进行恢复。当表空间或文件重新联机时SMON 将恢复该事务。清理未使用的临时段。例如 Oracle 数据库在创建索引时会分配扩展区。如果操作失败则 SMON 会清理临时空间。合并在字典管理的表空间中的多个连续空闲扩展区。SMON 定期检查是否需要做什么。其他进程在发现需要做什么时也可以调用 SMON 来做。数据库写入进程 DBWn数据库写入进程 DBWn 将数据库缓冲区的内容写入到数据文件中。DBWn 进程将数据库缓存中被修改的缓冲区写入到磁盘中。虽然一个数据库写入进程 DBW0 对于大多数系统来说已经足够但如果系统大量修改数据可以配置额外的写入进程——从 DBW1到 DBW9和从 DBWa 到 DBWj ——来提高写入性能。这些额外的 DBWn 进程在单处理器系统上用处不大。DBWn 进程在下列条件下会将脏缓冲区写入到磁盘当服务进程扫描了额定数目的缓冲区后仍未找到干净的可重复使用的缓冲区时它会通知 DBWn 执行写入操作。DBWn 尽可能以异步方式将脏缓冲区写入到磁盘以便同时能执行其他处理。DBWn 周期性地写出缓冲区以推进检查点该点是重做线程中实例恢复开始的位置。检查点的日志位置由在缓冲区高速缓存中最老的脏缓冲区确定。在许多情况下DBWn 写入的块将遍布整个磁盘。因此该写操作往往要比由 LGWR 执行的顺序写入速度慢。DBWn 进程尽可能进行多块写入以提高效率。多块写入的数据块数量因操作系统而异。日志写入进程 LGWR日志写入进程 LGWR 管理重做日志缓冲区。LGWR 将缓冲区中的一个连续部分写入联机重做日志。通过分离各种修改数据库缓冲区任务将脏缓冲区分散写入到磁盘而将重做缓冲区顺序写入到磁盘提高了数据库性能。在以下的情况下 LGWR 将自上次最后写入以来复制到缓冲区的所有重做条目写入联机重做日志用户提交了事务 。发生了在线重做日志切换。自 LGWR 最后一次写入到现在超过了三秒。重做日志缓冲区已达到三分之一满或包含 1 MB 以上被缓冲的数据。DBWn 必须将修改的缓冲区写入到磁盘。在 DBWn 可以将脏缓冲区写到磁盘之前与该缓冲区更改相关联的重做记录必须先被写入磁盘 预写协议。如果 DBWn 发现一些重做记录尚未写入则它通知 LGWR 将记录写入磁盘并等待 LGWR 完成此工作然后DBWn 才将数据缓冲区写入磁盘。LGWR 与提交Oracle 数据库使用快速提交机制来提高已提交事务的性能。当用户发出COMMIT 语句时事务分配到一个系统更改号 (SCN)。LGWR 将一个提交记录记入重做日志缓冲区连同提交 SCN 和事务的重做条目并立即写入到磁盘。重做日志缓冲区是循环的。当 LGWR 将重做条目从重做日志缓冲区写入到联机重做日志文件时服务进程可以复制新条目并覆盖已写入到磁盘的重做日志缓冲区中的条目。通常 LGWR 的写入速度足够快以确保在缓冲区中总会有可用空间供新条目使用即使对联机重做日志的访问很繁重时也是如此。包含事务提交记录的重做条目的原子写入是确定该事务已提交的唯一事件。Oracle 数据库向已提交事务返回一个成功代码虽然数据缓冲区尚未写入到磁盘。对数据块的相应更改被延迟直到 DBWn 在某个有利的时机将它们写到数据文件。LGWR 处理那些速度非常快或必须协调的操作。它将可从并发操作中受益的操作委托给日志写入器工作进程LGnn这些进程编号为 LG00-LG99。这些操作包括将重做信息从日志缓冲区写入重做日志文件以及将写入完成的消息通知给正在等待的服务器进程。重做传输工作进程TTnn编号为 TT00-TTzz负责将重做信息从当前的联机重做日志和备用重做日志传输到配置为异步ASYNC重做传输的远程备用目的地。注意LGWR 可能会在提交事务之前将重做日志条目写入到磁盘。只有之后提交了事务这些重做条目才会成为永久性的。当事务活动很高时 LGWR 可能会使用组提交。例如某个用户提交其事务导致 LGWR 将事务的重做条目写入到磁盘。在此写操作的过程中其他用户也试图提交。但 LGWR 无法写入磁盘以提交这些事务直到前面的写入完成为止。完成后, LGWR 可以将尚未提交的)等待事务中的重做条目列表在一个操作中全部写入。通过这种方式数据库最小化了磁盘 I/O而最大化了性能。如果提交请求继续维持在一个高的水平则每个 LGWR 写入操作都可能包含多个提交记录。LGWR 和无法访问的文件LGWR 同步写入联机重做日志文件组的所有活动镜像。如果某个日志文件不可访问则 LGWR 继续写入组中的其他文件并在 LGWR 跟踪文件和警报日志中记录一个错误。如果组中的所有文件都损坏或者如果因为尚未存档而不可用则 LGWR 不能继续工作。检查点进程CKPT检查点进程 (CKPT) 使用检查点信息更新控制文件和数据文件头并通知DBWn 将块写入磁盘。检查点信息包括检查点位置、SCN、联机重做日志中的起始恢复位置等等。如图 15-4 所示 CKPT 不会将数据块写入数据文件也不会将重做块写入联机重做日志文件。可管理性监视进程 MMON可管理性监视进程 MMON 执行许多与自动工作负载存储库 AWR) 相关的任务。例如 当某个度量超出其阈值时MMON 会写入信息并拍摄快照捕获最近修改的 SQL 对象的统计信息。MMON 从系统全局区SGA收集内存统计信息对其进行过滤并每隔 60 分钟或您选择的其他时间间隔在 AWR 中创建这些统计信息的快照。它还执行自动数据库诊断监视器ADDM分析并为超过阈值的度量发出警报。可管理性监视器轻量进程 MMNL将 SGA 中的活动会话历史 (ASH) 缓冲区统计信息写入磁盘。当 ASH 缓冲区已满时MMNL 将其写入到磁盘。MMNL 收集会话统计信息例如用户 ID、状态、机器及其正在处理的 SQL并将其存储在活动会话历史ASH缓冲区中该缓冲区是 SGA 中共享池的一部分。具体来说MMNL 每秒对 VSESSION 和 VSESSION_WAIT 视图进行采样然后将该数据记录在 ASH 缓冲区内的 V$ACTIVE_SESSION_HISTORY 视图中。MMNL 不会对非活动会话进行采样。ASH 是内存中的一个循环缓冲区因此在需要时较新的信息会覆盖较早的信息。当 ASH 缓冲区变满或 MMON 拍摄快照时MMNL 会将 ASH 缓冲区中的内容刷新清空到 AWR 中的 DBA_HIST_ACTIVE_SESS_HISTORY 视图中。由于空间资源宝贵MMNL 仅每十个条目中刷新一个。MMNL 还负责计算度量值。恢复进程RECO负责解决分布式数据库系统中因网络或系统故障而挂起的分布式事务在一个分布式数据库中恢复进程 RECO 会自动解决在分布式事务中的故障。一个节点的 RECO 进程会自动连接到可疑分布式事务中涉及的其他数据库。当 RECO 数据库之间重新建立了连接后它会自动解决所有可疑事务从每个数据库事务表中删除任何与可疑事务对应的未决事务行。可选后台进程可选后台进程即是未定义为强制性的后台进程。大多数可选后台进程是特定于任务或功能特性的。例如支持 Oracle 流高级队列 (AQ) 或 Oracle 自动存储管理 (Oracle ASM) 的后台进程只有在启用这些功能时才可用。归档进程ARCn重做日志切换发生后归档进程ARCn 将联机重做日志文件复制到脱机存储。这些进程也可能会收集事务重做数据并将其传送到备用数据库目标位置。仅当数据库处于归档模式下且启用了自动归档时才存在 ARCn 进程。归档进程ARCn仅在数据库处于 ARCHIVELOG 模式且启用了自动归档时才存在在这种情况下ARCn 会自动归档联机重做日志文件。日志写入器进程LGWR在联机重做日志组被归档之前不能重用或覆盖该组。数据库会根据需要启动多个 ARCn 进程以确保已填满的联机重做日志的归档不会落后。可能的进程包括 ARC0-ARC9 和 ARCa-ARCt共 31 个可能的目的地。初始化参数 LOG_ARCHIVE_MAX_PROCESSES 指定了数据库初始调用的 ARCn 进程数量。如果预计归档工作负载很重例如在批量加载数据期间可以增加 ARCn 进程的最大数量。同时也可以有多个归档日志目标位置。Oracle 建议为每个目标位置至少配置一个 ARCn 进程。作业队列进程 CJQ0 和 JnnnOracle 数据库使用作业队列进程来运行用户作业通常使用批处理模式。作业是一种用户定义的被计划运行一次或多次的任务。Oracle 数据库动态管理作业队列进程以使作业队列客户端在需要时能使用更多作业队列进程。当这些新启动的进程处于空闲状态时数据库会释放其资源。作业队列协调器进程CJQ0从数据字典中选择需要运行的作业并生成作业队列工作进程Jnnn来执行这些作业。Oracle Scheduler 会根据需要自动启动和停止 CJQ0。初始化参数 JOB_QUEUE_PROCESSES 指定了可为运行作业创建的最大进程数量。CJQ0 仅根据待运行作业数量和可用资源启动所需数量的作业队列进程。动态作业队列进程可能会在某个给定的时间间隔同时运行大量的作业。事件的顺序如下所job示Oracle 调度器根据需要会自动启动和停止作业协调进程 (CJQ0)。协调进程定期从系统表 JOB$中选择需要运行的作业。被选出的新作业是按时间排序的。协调进程动态派生出作业队列从属进程 (Jnnn) 来运行作业。作业队列进程运行由 CJQ0 进程选出以备执行的某个作业。每个作业队列进程一次运行一个作业直至完成。在进程完成单个作业的执行后它会轮询以运行更多工作。如果没有计划的作业可供执行则它进入睡眠状态且周期性地醒来再次轮询以运行更多工作。如果该进程未找到任何新的作业则它在一个预设的时间间隔后会终止。初始化参数 JOB_QUEUE_PROCESSES 表示在实例上可以同时运行的作业队列进程的最大数目。注意如果初始化参数 JOB_QUEUE_PROCESSES 被设置为 0则不会启动协调进程。Jnnn 进程负责运行由作业协调器分配的作业。当工作进程选择作业进行处理时它们会执行以下操作收集运行作业所需的所有元数据例如程序参数和权限信息。以作业所有者的身份启动一个数据库会话启动一个事务然后开始运行作业。在作业完成后提交并结束事务。关闭会话。当作业完成后工作进程会执行以下操作如果需要重新安排作业。更新作业表中的状态以反映作业是已完成还是计划再次运行。向作业日志表中插入一条条目。更新运行计数并在必要时更新失败和重试计数。执行清理。寻找新的工作。如果没有它们将进入休眠状态。恢复写进程(RVWR)使用闪回数据库时恢复写入器进程RVWR会从系统全局区SGA中的闪回缓冲区读取闪回数据并将其写入闪回日志。也就是说只要拥有所需的闪回日志它就可以将事务从数据库的当前状态回退到过去的某个时间点。闪回数据存档进程 FBDA闪回数据归档进程 FBDA 将跟踪表的历史行归档到闪回数据归档区。当跟踪表中包含 DML 的事务提交时该进程将行的前像存储到闪回数据存档区。它也会保存当前行上的元数据。FBDA 自动管理闪回数据存档的空间、 组织、和保留期等。此外该进程会跟踪被跟踪的事务归档已发生了多久。当修改已跟踪表的事务提交时FBDA 会读取数据库缓冲区缓存中的还原块以及数据文件中的还原段。然后它会筛选出与标记为归档的对象相关的内容并将这些还原信息复制到数据文件中的闪回数据归档表空间中。FBDA 维护当前行的元数据并跟踪已归档的数据量。空间管理协调进程 (SMCO)负责调度各种空间管理任务包括主动空间分配和空间回收。SMCO 动态生成空间管理工作进程Wnnn来执行这些任务。启动后工作进程充当自治代理。完成任务后工作进程会自动从队列中选取另一项任务。在空闲较长时间后该进程会自行终止。Wnnn 工作进程命名为 W001、W002 等代表空间管理以及 Oracle AI 数据库内存选项执行任务。对于空间管理Wnnn 进程在后台执行空间管理任务包括以下内容基于空间使用增长分析为本地管理的表空间和 SecureFiles 段预分配空间。创建和管理临时表空间元数据并回收孤立的临时段中的空间。回收已删除段中的空间。执行快速摄取延迟插入。对于 Oracle AI 数据库内存选项Wnnn 进程执行以下任务为优先级为低/中/高/关键的内存启用对象进行预填充并为内存协调器后台进程IMCO重新填充内存对象。响应引用内存启用对象的查询和 DML为 IMCO 前台进程启动内存填充和重新填充任务。SMCO 和 Wnnn 都可以作为线程或操作系统进程运行。调度器进程(Dnnn) 和共享服务进程 (Snnn)数据库连接模式配置为共享服务器模式时才会有这两个进程。在共享服务器环境中调度器进程Dnnn将多个传入的网络会话请求定向到共享服务器进程Snnn池。您可以为单个数据库实例创建多个调度器进程。Oracle Net 监听器进程建立与调度器的连接。当客户端进程发出需要共享服务器进程的连接请求时监听器会返回调度器的地址以便客户端进程在连接建立后可以直接与调度器通信。调度器将客户端请求放入数据库实例系统全局区SGA的大池中的请求队列里。下一个可用的共享服务器进程拾取该请求并进行处理。请求完成后共享服务器进程将响应放入大池中调用方调度器的响应队列然后响应队列将响应发送给调度器。调度器将完成的请求返回给客户端进程。从属进程从属进程是为其他进程执行工作的后台进程。I/O 从属进程I/O 从属进程 Innn 为不支持异步 I/O 的系统和设备模拟异步 I/O。异步的 I/O 没有传输时间要求使其他进程可以在完成传输之前就可以开始。例如假定应用程序在一个不支持异步 I/O 的操作系统上写入 1000 个块到磁盘。每次写入都是顺序发生的并等待一个写操作已成功的确认。而对于异步磁盘应用程序可以大容量写入数据块并在等待操作系统确认写入完的同时执行其他工作。为模拟异步 I/O由一个进程监督几个从属进程。调用者进程将工作分配给每个从属进程从属进程会等待每个写操作完成并在完成后报告调用者。在真正的异步 I/O 中操作系统会等待 I/O 完成并在完成时报告主进程而在模拟异步 I/O 中从属进程会等待并在完成时报告调用者。数据库支持包括以下不同类型的 I/O 从属进程恢复管理器 (RMAN)的 I/O 从属进程当使用 RMAN 备份或还原数据时可以为磁盘和磁带设备使用 I/O 从属进程。数据库写入从属进程如果计算机只有一个 CPU则数据库使用多个写入进程并不现实此时数据库可以通过多个从属进程来分布 I/O。DBWR 是扫描缓冲区高速缓存 LRU 列表中的块以写入到磁盘的唯一进程。而 I/O 从属进程为这些块执行 I/O。并行查询从属进程在并行执行或并行处理中多个进程同时协作来运行一个单一 SQL 语句。通过在多个进程之间分配工作Oracle 数据库可以更快地运行语句。例如四个进程分别处理一年中四个不同的季度而不是由一个进程处理所有四个季度。并行执行减少了在大型数据库如数据仓库上的数据密集型操作的响应时间。对称多处理 (SMP) 和集群系统能从并行执行获得最大的性能优势因为语句处理可以在多个 CPU 之间划分。并行执行也可以使某些类型的 OLTP 和混合系统受益。在 Oracle RAC 系统中由特定服务的服务配置控制并行执行。具体而言并行进程在已配置服务的多个节点上运行。默认情况下Oracle 数据库只在提供数据库连接服务的实例上运行并行进程。这并不影响其他并行操作如并行恢复或对 GV$查询的处理。并行执行在并行执行中服务进程作为并行执行协调器负责解析查询、分配和控制从属进程、并将输出发送给用户。给定一个 SQL 查询的查询计划协调器将 SQL 查询中的每个运算符分解成一些平行的片断、 并按查询中指定的顺序运行它们最后又将这些执行各个操作的从属进程所产生的部分结果集成起来。例如对一个表上的并行扫描。表被动态划分 动态分区成多个称为颗粒的加载单元。每个颗粒是一个由单个从属进程读取的数据块范围这些从属进程叫做并行执行服务器其名称格式为 Pnnn。数据库在执行时将颗粒映射到执行服务器。当一个执行服务器完成对某个颗粒对应行的读取而此时还有其它颗粒要读取时该执行服务器从协调器获取另一个颗粒。此操作将继续直到读取完整个表。执行服务器向协调器发送执行结果协调器再将这些片断合并成最终所需的全表扫描结果。分配给单个操作的并行执行服务器的数量是操作的并行度。在同一 SQL 语句中的多个操作都具有相同的并行度。本文参考官方文档https://docs.oracle.com/cd/E28271_01/server.1111/e25789/toc.htm
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2480097.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!