本节介绍以下强制后台进程:
- 过程监控过程(PMON)组
- 流程管理器(PMAN)
- 监听者注册流程(LREG)
- 系统监控过程(SMON)
- 数据库编写过程(DBW)
- 日志编写过程(LGWR)
- 检查点过程(CKPT)
- 可管理性监控流程(MMON和MMNL)
-
过程监控过程(PMON)组
该PMON组包括PMON,清理主处理(CLMN),及清理辅助器进程(CL NN)。这些流程负责监视和清理其他流程。
PMON组监督缓冲区缓存的清理以及客户端进程使用的资源的释放。例如,PMON组负责重置活动事务表的状态,释放不再需要的锁,并从活动进程列表中删除已终止进程的进程ID。
数据库必须确保释放已终止进程所拥有的资源,以便其他进程可以使用它们。否则,进程可能最终被阻塞或陷入争用。
过程监控过程(PMON)
该过程监视器(PMON)检测其他后台进程的终止。如果服务器或调度程序进程异常终止,则PMON组负责执行进程恢复。进程终止可能有多种原因,包括操作系统终止命令或
ALTER SYSTEM KILL SESSION
语句。
清理主流程(CLMN)
PMON将清理工作委托给清理主进程(CLMN)。检测异常终止的任务仍然是PMON。
CLMN定期执行已终止进程,已终止会话,事务,网络连接,空闲会话,分离事务以及已超出其空闲超时的已分离网络连接的清除。
清理助手进程(CLnn)
CLMN将清理工作委托给CL nn帮助程序进程。
CL nn进程有助于清除已终止的进程和会话。辅助进程的数量与要完成的清理工作量和当前清理效率成正比。
清理过程可能会被阻止,从而阻止其继续清理其他进程。此外,如果多个进程需要清理,那么清理时间可能很长。由于这些原因,Oracle数据库可以并行使用多个辅助进程来执行清理,从而缓解性能下降。
在V$CLEANUP_PROCESS
和V$DEAD_CLEANUP
视图包含约CLMN清理元数据。该V$CLEANUP_PROCESS
视图包含每个清理过程一行。例如,如果V$CLEANUP_PROCESS.STATE
是BUSY
,则该过程当前正在进行清理。数据库资源隔离
如果进程或会话终止,则PMON组将保留的资源释放到数据库。在某些情况下,PMON组可以自动隔离损坏的,不可恢复的资源,以便不立即强制终止数据库实例。
PMON组继续对持有隔离资源的进程或会话执行尽可能多的清理。该V$QUARANTINE
视图包含元数据,例如资源类型,消耗的内存量,导致隔离的Oracle错误等。流程管理器(PMAN)
流程管理器(PMAN)监督多个后台进程,包括共享服务器,池化服务器和作业队列进程。
PMAN监视,生成并停止以下类型的进程: 调度程序和共享服务器进程
- 数据库驻留连接池的连接代理和池化服务器进程
- 作业队列进程
- 可重启的后台进程
监听者注册流程(LREG)
的监听器登记处理(LREG)寄存器有关数据库实例和调度程序进程与Oracle网络监听信息。
实例启动时,LREG轮询侦听器以确定它是否正在运行。如果监听器正在运行,则LREG将相关参数传递给它。如果它没有运行,则LREG会定期尝试联系它。
注意:
在Oracle Database 12c之前的版本中,PMON执行了侦听器注册
系统监控过程(SMON)
该系统监视处理(SMON)是负责各种系统级清理职责。
分配给SMON的职责包括:
- 必要时,在实例启动时执行实例恢复。在Oracle RAC数据库中,一个数据库实例的SMON进程可以为失败的实例执行实例恢复。
- 由于文件读取或表空间脱机错误,恢复在实例恢复期间跳过的已终止事务。当表空间或文件重新联机时,SMON将恢复事务。
- 清理未使用的临时段。例如,Oracle Database在创建索引时分配扩展区。如果操作失败,则SMON清理临时空间。
- 在字典管理的表空间中合并连续的可用扩展区。
SMON定期检查是否需要它。如果其他进程检测到需要,则可以调用SMON。
数据库编写过程(DBW)
该数据库写进程(DBW)数据库缓冲区的内容写入到数据文件。DBW进程将数据库缓冲区高速缓存中的修改缓冲区写入磁盘。
虽然一个数据库写程序进程(DBW0)适用于大多数系统,但您可以配置其他进程-DBW1到DBW9,DBWa到DBWz以及BW36到BW99-以在系统大量修改数据时提高写入性能。这些额外的DBW进程在单处理器系统上没有用。
DBW进程在以下条件下将脏缓冲区写入磁盘:
- 当服务器进程在扫描阈值数量的缓冲区后找不到干净的可重用缓冲区时,它会向DBW发送写入信号。在执行其他处理时,DBW会尽可能异步地将脏缓冲区写入磁盘。
- DBW定期写入缓冲区以推进检查点,该检查点是重做线程中从实例恢复开始的位置。检查点的日志位置由缓冲区高速缓存中最旧的脏缓冲区确定。
在许多情况下,DBW写入的块分散在整个磁盘中。因此,写入往往比LGWR执行的顺序写入慢。DBW在可能的情况下执行多块写入以提高效率。以多块写入方式写入的块数因操作系统而异。
日志编写过程(LGWR)
该日志写进程(LGWR)管理联机重做日志缓冲区。
LGWR将缓冲区的一部分写入联机重做日志。通过分离修改数据库缓冲区,执行脏缓冲区到磁盘的分散写入以及执行重做到磁盘的快速顺序写入的任务,数据库可以提高性能。
在下列情况下,LGWR会写入自上次写入以来已复制到缓冲区中的所有重做条目:
- 用户提交事务。
- 发生在线重做日志切换。
- 自LGWR上次写作以来已过去三秒钟。
- 重做日志缓冲区已满三分之一或包含1 MB缓冲数据。
- DBW必须将修改后的缓冲区写入磁盘。
在DBW可以写入脏缓冲区之前,数据库必须向磁盘写入与缓冲区更改相关联的重做记录(预写协议)。如果DBW发现某些重做记录尚未写入,则表示LGWR将记录写入磁盘,并在将数据缓冲区写入磁盘之前等待LGWR完成。LGWR和Commits
Oracle数据库使用快速提交机制来提高已提交事务的性能。
当用户发出COMMIT
语句时,会为事务分配系统更改号(SCN)。LGWR将提交记录放入重做日志缓冲区并立即将其写入磁盘,以及提交SCN和事务的重做条目。
重做日志缓冲区是循环的。当LGWR将重做条目从重做日志缓冲区写入联机重做日志文件时,服务器进程可以通过重做日志缓冲区中已写入磁盘的条目复制新条目。LGWR通常写得足够快,以确保缓冲区中的空间始终可用于新条目,即使访问在线重做日志很重。
包含事务提交记录的重做条目的原子写入是确定事务已提交的单个事件。虽然数据缓冲区尚未写入磁盘,但Oracle数据库会向提交事务返回成功代码。对数据块的相应更改将推迟,直到DBW将它们写入数据文件有效。
注意:
LGWR可以在事务提交之前将重做日志条目写入磁盘。仅当事务稍后提交时,受重做条目保护的更改才会成为永久更改。
当活动很高时,LGWR可以使用组提交。例如,用户提交,导致LGWR将事务的重做条目写入磁盘。在此写入期间,其他用户提交。在上一次写入完成之前,LGWR无法写入磁盘来提交这些事务。完成后,LGWR可以在一次操作中写入等待事务(尚未提交)的重做条目列表。通过这种方式,数据库可最大限度地减少磁盘I / O并最大限度地提高性能。如果提交请求以高速率继续,那么LGWR的每次写入都可以包含多个提交记录。
LGWR和无法访问的文件
LGWR同步写入活动镜像的联机重做日志文件组。
如果日志文件不可访问,则LGWR继续写入组中的其他文件,并将错误写入LGWR跟踪文件和警报日志。如果组中的所有文件都已损坏,或者该组因未归档而不可用,则LGWR无法继续运行。
检查点过程(CKPT)
该检查点进程(CKPT)更新与检查点信息和信号DBW控制文件和数据文件头写入的数据写入磁盘。检查点信息包括检查点位置,SCN和联机重做日志中的位置以开始恢复。
如图所示,CKPT不会将数据块写入数据文件,也不会将重做块写入联机重做日志文件。
可管理性监控流程(MMON和MMNL)
该管理监控进程(MMON)执行相关的许多任务自动工作负载(AWR) 。
例如,MMON在度量标准违反其阈值,拍摄快照和捕获最近修改的SQL对象的统计值时写入。
可管理性监视器精简过程(MMNL)将统计信息从SGA中的活动会话历史记录(ASH)缓冲区写入磁盘。当ASH缓冲区已满时,MMNL会写入磁盘。
回收过程(RECO)
在分布式数据库中,恢复程序进程(RECO)自动解决分布式事务中的故障。
节点的RECO进程自动连接到涉及不确定分布式事务的其他数据库。当RECO重新建立数据库之间的连接时,它会自动解析所有不确定的事务,从每个数据库的待处理事务表中删除与已解析事务对应的任何行。
可选的后台进程
可选的后台进程是未定义为强制的任何后台进程。
大多数可选后台进程特 定于任务或功能。例如,支持Oracle ASM的后台进程仅在启用此功能时可用。
本节介绍一些常见的可选过程:
- Archiver Processes(ARCn)
- 作业队列进程(CJQ0和Jnnn)
- 闪回数据存档过程(FBDA)
- 空间管理协调员进程(SMCO)
Archiver进程(ARC n)
一个归档进程程序(ARCn)复制联机重做重做日志切换发生后,日志文件到离线存储。
这些进程还可以收集事务重做数据并将其传输到备用数据库目标。仅当数据库处于ARCHIVELOG模式且启用了自动存档时,才会存在ARC n进程。
作业队列进程(CJQ0和Jnnn)
一个队列进程运行用户的工作,经常在批处理模式。作业是计划运行一次或多次的用户定义任务。
例如,您可以使用作业队列在后台安排长时间运行的更新。给定开始日期和时间间隔,作业队列进程尝试在下一次出现间隔时运行作业。
Oracle数据库动态管理作业队列进程,从而使作业队列客户端在需要时可以使用更多作业队列进程。数据库释放新进程闲置时使用的资源。
动态作业队列进程可以以给定间隔同时运行许多作业。事件顺序如下:
- Oracle Scheduler根据需要自动启动和停止作业协调程序进程(CJQ0)。协调器进程定期选择需要从系统
JOB$
表运行的作业。选择的新工作按时间排序。 - 协调器进程动态生成作业队列从属进程(Jnnn)以运行作业。
- 作业队列进程运行CJQ0进程选择执行的作业之一。每个作业队列进程一次运行一个作业以完成。
- 在该过程完成单个作业的执行后,它会轮询更多作业。如果没有计划执行任务,则它进入睡眠状态,从该状态定期唤醒并轮询更多作业。如果进程未找到任何新作业,则会在预设的时间间隔后终止。
初始化参数JOB_QUEUE_PROCESSES
表示可以在实例上并发运行的最大作业队列进程数。但是,客户端不应假定所有作业队列进程都可用于作业执行。
闪回数据存档过程(FBDA)
该闪回数据归档处理(FBDA)档案跟踪表的历史行到闪回数据存档。
当跟踪表上包含DML的事务提交时,此进程会将更改的行的前映像存储到闪回数据存档中。它还保留当前行的元数据。
FBDA自动管理闪回数据存档以获取空间,组织和保留。此外,该流程还会跟踪已跟踪事务的归档发生的时间。
空间管理协调员进程(SMCO)
SMCO流程协调各种与空间管理相关的任务的执行。
典型任务包括主动空间分配和空间回收。SMCO动态生成从属进程(W nnn)以实现该任务。
从属进程
I / O从属进程
I / O从属进程(Innn)为不支持它的系统和设备模拟异步I / O.
在异步I / O中,没有传输的时序要求,使得其他进程在传输完成之前启动。
例如,假设应用程序将1000个块写入不支持异步I / O的操作系统上的磁盘。每次写入顺序发生,并等待写入成功的确认。使用异步磁盘,应用程序可以批量编写块并执行其他工作,同时等待操作系统写入所有块的响应。
为了模拟异步I / O,一个进程监视多个从进程。调用程序进程将工作分配给每个从属进程,这些进程等待每个写入完成并在完成后向调用者报告。在真正的异步I / O中,操作系统等待I / O完成并报告回过程,而在模拟异步I / O中,从设备等待并向调用者报告。
数据库支持不同类型的I / O从属,包括以下内容:
- Recovery Manager(RMAN)的I / O从站
使用RMAN备份或还原数据时,可以将I / O从站用于磁盘和磁带设备。 - 数据库编写器奴隶
如果使用多个数据库写程序进程是不切实际的,例如当计算机有一个CPU时,则数据库可以通过多个从属进程分配I / O. DBW是扫描缓冲区高速缓存LRU列表以寻找要写入磁盘的块的唯一进程。但是,I / O从站执行这些块的I / O.
并行执行(PX)服务器进程
在并行执行中,多个进程同时协同工作以运行单个SQL语句。
通过在多个进程之间划分工作,Oracle数据库可以更快地运行该语句。例如,四个流程在一年内处理四个不同的季度,而不是一个处理所有四个季度的流程。
并行执行与串行执行形成对比,其中单个服务器进程为顺序执行SQL语句执行所有必要的处理。例如,要执行全表扫描,例如SELECT * FROM employees
,一个服务器进程执行所有工作,如图所示。
图串行全表扫描
并行执行减少了大型数据库(如数据仓库)上数据密集型操作的响应时间。对称多处理(SMP)和集群系统从并行执行中获得最大的性能优势,因为语句处理可以在多个CPU之间分配。并行执行还可以使某些类型的OLTP和混合系统受益。
在Oracle RAC系统中,特定服务的服务放置控制并行执行。具体而言,并行进程在配置服务的节点上运行。默认情况下,Oracle数据库仅在提供用于连接数据库的服务的实例上运行并行进程。这不会影响其他并行操作,例如并行恢复或GV$
查询处理。
查询协调员
在并行执行中,服务器进程充当查询协调器(也称为并行执行协调器)。
查询协调器负责以下事项:
- 解析查询
- 分配和控制并行执行服务器进程
- 将输出发送给用户
给定查询的查询计划,协调器将SQL查询中的每个运算符分解为并行块,按查询中指定的顺序运行它们,并集成执行运算符的并行执行服务器生成的部分结果。
分配给单个操作的并行执行服务器的数量是操作的并行度。同一SQL语句中的多个操作都具有相同的并行度。
生产者和消费者
并行执行服务器分为生产者和消费者。生产者负责处理他们的数据,然后将其分发给需要它的消费者。
数据库可以使用各种技术执行分发。两种常见技术是广播和散列。在广播中,每个生产者将行发送给所有消费者。在散列中,数据库计算一组键上的散列函数,并使每个消费者负责散列值的子集。
图表示并行执行以下语句时生产者和使用者之间的相互作用:
SELECT * FROM employees ORDER BY last_name;
执行计划实现employees
表的完整扫描。扫描之后是一类检索到的行。扫描操作中涉及的所有生产者进程都将行发送到执行排序的相应使用者进程。
图生产者和消费者
颗粒
在并行执行中,表被动态划分为加载单元。每个单元,称为颗粒,是访问数据时最小的工作单元。
基于块的粒度是由单个并行执行服务器(也称为PX服务器)读取的表的一系列数据块,其用作名称格式。为了在并行服务器进程之间获得均匀的工作分配,粒度的数量总是远高于请求的DOP。 P_nnn_
图显示了employees
表的并行扫描。
图并行全表扫描
数据库在执行时将粒度映射到并行执行服务器。当并行执行服务器完成读取与粒度对应的行时,当粒子保留时,它从查询协调器获得另一个粒度。此操作将继续,直到读取该表为止。执行服务器将结果发送回协调器,协调器将这些部分组装成所需的全表扫描。