图片

作者 | JiekeXu   来源 |公众号 JiekeXu DBA之路

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

作者:JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE,OpenTenBase ACE,金仓最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮年度“墨力之星”,拥有 OCP/OCM 认证,MySQL 5.7/8.0 OCP  认证以及金仓KCM、KCSM证书,TiDB PCTA/PCTP 等其他国产数据库认证证书,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!后台回复【加群】添加我微信一起交流学习。

图片

前  言

前面两篇介绍了 Oracle 26ai 体系结构和物理结构

35 张图带你了解 Oracle AI Database 26ai 技术架构(上)

35 张图带你了解 Oracle AI Database 26ai 技术架构(中)

今天这个下篇介绍 Oracle 后台进程。不过在介绍之前呢,想先做一个匿名问卷调查,看看伙伴们所在的公司国产化进程有多快,还剩下多少存量的 Oracle 系统。



后台进程篇

进程监控进程 PMON

图片.png

进程监视器进程 (PMON)会定期扫描所有进程,查找任何异常终止的进程。PMON 将清理工作委托给清理主进程 (CLMN),CLMN 会定期清理已终止的进程和会话。CLMN 再将清理工作委托给清理工作进程 (CLnn)。

PMON 作为操作系统进程运行,而非线程。除了数据库实例外,PMON 还运行在 Oracle 自动存储管理 (Oracle ASM) 实例和 Oracle ASM 代理实例上。

进程管理进程 PMAN

图片.png

进程管理器进程 (PMAN)负责管理多个后台进程,包括共享服务器、池化服务器和作业队列进程。PMAN 会根据需要监控、启动和停止以下类型的进程:

  • • 调度程序和共享服务器进程

  • • 数据库驻留连接池的连接代理和池化服务器进程

  • • 作业队列进程

  • • 可重启的后台进程

PMAN 作为操作系统进程运行,而非线程运行。除了数据库实例外,PMAN 还可在 Oracle 自动存储管理 (Oracle ASM) 实例和 Oracle ASM 代理实例上运行。

监听注册进程 LREG

图片.png

监听器注册进程(LREG)会通知监听器有关实例、服务、处理程序和端点的信息。LREG  可以作为线程或操作系统进程运行。除了数据库实例外,LREG 还会在Oracle自动存储管理(Oracle ASM)实例和 Oracle  实时应用集群(Oracle RAC)上运行。

系统监听进程 SMON

图片.png

系统监控进程 (SMON)执行许多数据库维护任务,包括以下任务:

  • • SMON通过根据 Undo 空间使用统计信息对撤销段进行联机、脱机和收缩操作来维护 undo 撤销表空间。作为撤销维护的一部分,SMON  还有助于清理较大的已终止事务,例如当 PMON 检测到拥有该事务的进程已终止并开始清理时。SMON  可能会调用并行查询进程来帮助并行回滚这些事务。

  • • 当数据字典处于瞬态和不一致状态时,对其进行清理。

  • • 维护用于支持 Oracle Flashback 功能的系统变更号 (SCN) 到时间映射表。

SMON 能够应对后台活动期间发生的内部和外部错误。SMON 可以作为线程或操作系统进程运行。在 Oracle 实时应用集群 (Oracle RAC) 数据库中,一个实例的 SMON 进程可以为其他发生故障的实例执行实例恢复。

数据库写入进程 DBWn

图片.png

数据库写入进程 (DBWn)读取数据库缓冲区缓存,并将修改后的缓冲区写入数据文件。它还处理检查点、文件打开同步以及块写入记录的日志记录。如果配置了闪存缓存,DBWn 还会读取数据库智能闪存缓存(闪存缓存)。

在许多情况下,DBWn 写入的数据块分散在磁盘各处,因此其写入速度往往比日志写入进程 (LGWR) 执行的顺序写入要慢。DBWn 会尽可能执行多块写入以提高效率。多块写入中写入的数据块数量因操作系统而异。

初始化 DB_WRITER_PROCESSES 参数指定数据库写入进程的数量。数据库写入进程的数量可以设置为 1 到 100 个。前 36 个数据库写入进程的名称分别为 DBW0-DBW9 和 DBWa-DBWz。第 37 个到第 100 个数据库写入进程的名称分别为 BW36-BW99。数据库会根据 CPU  和处理器组的数量,为DB_WRITER_PROCESSES 参数选择一个合适的默认设置,或者调整用户指定的设置。

检查点进程 CKPT

图片.png

检查点进程 (CKPT)会在特定时间触发数据库写入进程 (DBWn)读取数据库缓冲区缓存并将修改后的缓冲区写入数据文件,从而启动检查点请求。每次检查点请求完成后,CKPT 会更新数据文件头和控制文件,以记录最新的检查点信息。

CKPT 每三秒检查一次内存量是否超过 PGA_AGGREGATE_LIMIT 初始化参数的值,如果超过,则采取相应措施。

CKPT 可以作为线程或操作系统进程运行。除了数据库实例外,CKPT 还可以在 Oracle 自动存储管理 (Oracle ASM) 实例上运行。

可管理性监控流程 (MMON) 和可管理性监控精简版流程 (MMNL)

图片.png

可管理性监视进程(MMON)和可管理性监视轻量级进程(MMNL)执行与自动工作负载存储库(AWR)相关的任务。AWR 是一个历史性能数据仓库,包含系统、会话、单个SQL语句、段和服务的累积统计信息。它提供问题检测和自动调优功能。AWR 位于 SYSAUX 表空间中。AWR 报告可以在CDB根容器或任何PDB中生成。有关多租户容器数据库(CDB)中AWR的工作方式的更多信息,请参见《关于在CDB中使用可管理性功能》[2]

MMON 从系统全局区(SGA)收集内存统计信息,对其进行筛选,并每60分钟(或您选择的其他间隔)在AWR中创建这些统计信息的快照。它还执行自动数据库诊断监视器(ADDM)分析,并对超过阈值的指标发出警报。

MMNL收集会话统计信息(例如用户ID、状态、机器以及正在处理的SQL),并将它们存储在活动会话历史(ASH)缓冲区中,该缓冲区是 SGA 共享池的一部分。具体来说,MMNL 每秒采样 V$SESSION 和 V$SESSION_WAIT 视图,然后将这些数据记录在 ASH 缓冲区中的 V$ACTIVE_SESSION_HISTORY 视图中。MMNL 不采样非活动会话。ASH 缓存区是内存中的滚动缓冲区,因此当需要时,较新的信息会覆盖较早的信息。当 ASH 缓冲区满或 MMON 创建快照时,MMNL 会将 ASH 缓冲区的内容刷新(清空)到 AWR 中的 DBA_HIST_ACTIVE_SESS_HISTORY 视图中。由于空间成本较高,MMNL 每 10 条记录仅刷新一条。MMNL 还计算指标。

MMON和MMNL既可以作为线程运行,也可以作为操作系统进程运行。除了数据库实例外,MMON和MMNL还会在Oracle自动存储管理(Oracle ASM)实例上运行。

恢复进程(RECO)

图片.png

恢复进程(RECO)用于解决分布式数据库系统中因网络或系统故障而处于挂起状态的分布式事务。分布式数据库系统是由多个数据库服务器组成的一组,这些服务器对应用程序而言看起来像是一个单一的数据源。节点的 RECO 进程会自动连接到参与可疑分布式事务的其他数据库。当 RECO 重新建立数据库之间的连接时,它会自动解决所有可疑事务,并从每个数据库的待处理事务表中删除与已解决事务对应的行。RECO 可以作为线程运行,也可以作为操作系统进程运行。

日志写进程 LGWR

图片.png

服务器进程将数据块的更改写入数据库缓冲区缓存,并将重做数据写入重做日志缓冲区。日志写入进程(LGWR)将重做日志条目按顺序从重做日志缓冲区写入联机重做日志。如果数据库具有多路复用的重做日志,则LGWR会将相同的重做日志条目写入重做日志文件组中的所有成员。

LGWR 处理速度非常快或必须进行协调的操作。它将可能受益于并发操作的任务委托给日志写入工作进程(LGnn),这些进程的编号为 LG00-LG99。这些操作包括将日志缓冲区中的重做数据写入重做日志文件,以及向等待的服务器进程发布已完成的写入通知。

重做传输工作进程(TTnn),编号为 TT00-TTzz,将来自当前联机重做日志和备用重做日志的重做数据传输到为异步(ASYNC)重做传输配置的远程备用目标。

LGWR 可以作为线程或操作系统进程运行。除了数据库实例外,LGWR还运行在Oracle自动存储管理(Oracle  ASM)实例上。在Oracle Real Application Clusters(Oracle  RAC)配置中的每个数据库实例都有其自己的重做日志文件集。

归档进程 ARCn

图片.png

归档进程(ARCn)仅在数据库处于 ARCHIVELOG 模式且启用了自动归档时存在。在这种情况下,ARCn 会自动归档联机重做日志文件。日志写入进程(LGWR)在联机重做日志组已被归档之前,无法重用并覆盖该日志组。数据库会根据需要启动多个 ARCn 进程,以确保已填满的联机重做日志的归档不会滞后。可能的进程包括 ARC0-ARC9 和 ARCa-ARCt(共31个可能的目标)。

LOG_ARCHIVE_MAX_PROCESSES 初始化参数指定数据库初始调用的 ARCn 进程数量。如果您预计归档工作量较大(例如在数据批量加载期间),可以增加 ARCn 进程的最大数量。此外,还可以有多个归档日志目标。Oracle 建议每个库至少有一个ARCn 进程。ARCn可以作为线程运行,也可以作为操作系统进程运行。

作业队列协调进程 CJQ0

图片.png

作业队列协调进程(CJQ0)从数据字典中选择需要运行的作业,并启动作业队列工作进程(Jnnn)来执行这些作业。Oracle  Scheduler 会根据需要自动启动和停止 CJQ0。JOB_QUEUE_PROCESSES  初始化参数指定可用于运行作业的最大进程数。CJQ0 仅启动与需要运行的作业数量和可用资源相匹配的作业队列进程。

Jnnn 进程运行作业协调器分配的作业。当工作进程选择作业进行处理时,它们会执行以下操作:

  • • 收集运行作业所需的所有元数据(例如,程序参数和权限信息)。

  • • 以作业所有者的身份启动数据库会话,启动事务,然后开始运行作业。

  • • 作业完成后提交并结束事务。

  • • 关闭会话。

当作业完成时,工作进程会执行以下操作:

  • • 如需重新调度,则重新安排作业。

  • • 更新作业表中的状态,以反映作业是否已完成或计划再次运行。

  • • 在作业日志表中插入一条记录。

  • • 更新运行次数,必要时更新失败次数和重试次数。

  • • 清理。

  • • 查找新任务。(如果没有新任务,它们将进入睡眠状态。)

CJQ0 和 Jnnn 均可作为线程或操作系统进程运行。

恢复写进程 RVWR

图片.png

当您使用闪回数据库功能时,恢复写入进程(RVWR)会从系统全局区(SGA)中的闪回缓冲区读取闪回数据,并将其写入闪回日志。也就是说,它会将数据库从当前状态回退到过去某个时间点的事务,前提是您拥有所需的闪回日志。RVWR可以作为线程运行,也可以作为操作系统进程运行。

闪回数据归档进程 FBDA

图片.png

使用闪回数据库时,闪回数据归档进程(FBDA)会跟踪并存储表在其整个生命周期中的事务更改。这样,您可以将表闪回,将其恢复到过去某个时间点的状态。

当修改已跟踪表的事务提交时,FBDA 会读取数据库缓冲区缓存中的撤销块以及数据文件中的撤销段。然后,它会筛选出与标记为归档的对象相关的部分,并将这些撤销信息复制到数据文件中的闪回数据归档(表空间)中。FBDA 会维护当前行的元数据,并跟踪已归档的数据量。

FBDA 可以自动管理闪回数据归档的空间、组织(表空间分区)和保留期限。此外,FBDA 还会跟踪已跟踪事务的归档进度。FBDA 可以作为线程或操作系统进程运行。

空间管理协调员进程 SMCO

图片.png

可选的空间管理协调进程  (SMCO)负责调度各种空间管理任务,包括主动空间分配和空间回收。SMCO 会动态生成空间管理工作进程  (Wnnn)来执行这些任务。工作进程启动后,会作为自主代理运行。完成一项任务后,工作进程会自动从队列中领取另一项任务。长时间空闲后,该进程会自动终止。

Wnnn 工作进程(命名为 W001、W002 等)代表空间管理和 Oracle AI 数据库内存选项执行任务。

对于空间管理,Wnnn 进程在后台执行空间管理任务,包括以下任务:

  • 根据空间使用增长分析,预先将空间分配到本地管理的表空间和 SecureFiles 段中。 

  • 创建和管理临时表空间元数据,并从孤立的临时段中回收空间。 

  • 从丢弃的段中回收空间。 

  • 执行快速导入延迟插入操作。 

对于 Oracle AI 数据库内存选项,Wnnn 进程执行以下任务:

  • 预先填充优先级为 LOW/MEDIUM/HIGH/CRITICAL 的内存启用对象,并为内存协调器后台进程 (IMCO) 重新填充内存对象。 

  • 响应引用内存启用对象的查询和 DML,启动 IMCO 前台进程的内存填充和重新填充任务。 

    SMCO 和 Wnnn 都可以作为线程或操作系统进程运行。

调度程序进程 (Dnnn) 和共享服务器进程 (Snnn)

图片.png

在共享服务器环境中,dispatcher process 调度进程 (Dnnn)将多个传入的网络会话请求定向到 shared server processes 共享服务器进程池(Snnn) 。您可以为单个数据库实例创建多个调度进程。

Oracle Net 监听器进程会与调度器建立连接。当客户端进程发出需要共享服务器进程的连接请求时,监听器会返回调度器的地址,以便客户端进程在连接建立后可以直接与调度器通信。

调度器将客户端请求放入数据库实例内系统全局区  (SGA)  大池中的请求队列。下一个可用的共享服务器进程会领取并处理该请求。请求处理完毕后,共享服务器进程会将响应放入调用调度器的响应队列(位于大池中),响应队列会将响应发送给调度器。调度器最终将处理完毕的请求返回给客户端进程。

Snnn 和 Dnnn 都可以作为线程或操作系统进程运行。除了数据库实例之外,Dnnn 还可以在共享服务器环境中运行。

引用链接

[1] 《Oracle Real Application Clusters 19c 技术架构》: https://docs.oracle.com/en/database/oracle/oracle-database/26/adrac/rac_db_config.html
[2] 《关于在CDB中使用可管理性功能》: https://docs.oracle.com/en/database/oracle/oracle-database/26/multi/administering-a-cdb-with-sql-plus.html#GUID-DF42C0D3-8968-4810-9327-9D176337D356

参考链接

https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/introduction-to-oracle-database.html#GUID-8F2EEEC8-0372-4419-88FF-7D77A9C0FCAD
https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbserver.html
https://docs.oracle.com/en/database/oracle/oracle-database/26/adrac/rac_db_config.html

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!

——————————————————————————

公众号:JiekeXu DBA之路

墨天轮:https://www.modb.pro/u/4347

CSDN :https://blog.csdn.net/JiekeXu

ITPUB:https://blog.itpub.net/69968215

IFCLUB:https://ifclub.com.cn/user?type=1

腾讯云:https://cloud.tencent.com/developer/user/5645107 ——————————————————————————

图片

第三批国测公布:国产数据库新势力的破局与价值

2024 年公众号 JiekeXu DBA之路历史文章合集

2023 年公众号 JiekeXu DBA之路历史文章合集

2022 年公众号 JiekeXu DBA之路历史文章合集

2021 年公众号历史文章合集

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐