首页 > 数据库 > Oracle > 用32张图,快速掌握Oracle 26AI体系结构
本文翻译自:
https://docs.oracle.com/en/database/oracle/oracle-database/26/administration.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbserver.html
Oracle AI Database 26ai Technical Architecture

注释
一个 Oracle AI 数据库至少包含一个数据库实例和一个数据库。数据库实例由内存和进程组成,用于管理多租户容器数据库 (CDB)。CDB 由物理存储结构(数据文件)和逻辑数据结构(模式及模式对象)组成。
此图展示了一个单实例数据库架构,其中数据库和数据库实例之间是一一对应的关系。同一台服务器机器上可以存在多个单实例数据库。此配置对于在同一台机器上运行不同版本的 Oracle AI 数据库非常有用。
一个 Oracle 真正应用集群 (Oracle RAC) 数据库架构由多个实例组成,这些实例运行在不同的服务器机器上,但共享同一个数据库。有关 Oracle RAC 架构的更多信息,请参阅 Oracle Real Application Clusters 19c 技术架构。
Oracle Net 监听器是一个数据库服务器进程,它接收来自客户端进程的传入连接,建立与数据库实例的连接,然后将客户端连接移交给服务器进程以直接通信来完成客户端请求。单实例数据库的监听器可以在数据库服务器本地运行,也可以远程运行。
您可以使用多种工具来管理数据库,包括以下工具:
(1)Oracle 数据泵
(2)Oracle 企业管理器
(3)Oracle AI 数据库自动升级
(4)数据库配置助手 (DBCA)
(5)Oracle 恢复管理器 (RMAN)
(6)Oracle 服务器控制工具 (SRVCTL)
(7)SQL Developer
(8)SQL
Loader
(9)SQLPlus

注释
在 Oracle AI 数据库中,数据库实例是一组管理数据库文件的进程和内存结构。主要的内存结构是系统全局区 (SGA) 和程序全局区 (PGA)。托管全局区 (MGA) 是一个内存框架,可以在受信任的 Oracle 进程组之间共享和协调内存。后台进程对数据库文件进行操作,并利用内存结构来完成其工作。数据库实例仅存在于内存中。
数据库实例还拥有服务器进程,用于代表客户端程序处理与数据库的连接,并为客户端进程执行工作。例如,这些服务器进程解析并运行 SQL 语句,检索结果并将其返回给客户端进程。这类服务器进程也称为前台进程。
在多租户架构中,一个数据库实例与一个多租户容器数据库 (CDB) 相关联。插入到该 CDB(直接插入或通过应用程序容器插入)的所有可插拔数据库 (PDB) 共享同一组后台进程和 SGA。

注释
系统全局区 (SGA) 是包含一个 Oracle AI 数据库实例的数据和控制信息的内存区域。所有服务器进程和后台进程共享 SGA。启动数据库实例时,会显示为 SGA 分配的内存量。SGA 包括以下数据结构:
(1)共享池
缓存了多个用户可以共享的各种结构;例如,共享池存储了解析的 SQL、PL/SQL 代码、系统参数和数据字典信息。数据库中发生的几乎所有操作都涉及共享池。例如,如果用户运行一条 SQL 语句,那么 Oracle AI 数据库就会访问共享池。
(2)(可选)向量池
要允许向量索引的创建和维护,必须启用 SGA 中一个称为向量池的内存区域。向量池是在 SGA 中分配的内存,用于存储分层可导航小世界 (HNSW) 向量索引及所有相关元数据。它还用于加速倒排文件平面 (IVF) 索引的创建,以及对具有 IVF 索引的基表执行数据操作语言 (DML) 操作。
(3)(可选)闪回缓冲区
与闪回数据库协同工作,以便您可以将数据回退到过去以纠正任何问题。启用闪回数据库后,恢复写入器进程 (RVWR) 启动。RVWR 定期将修改过的块从缓冲区缓存复制到闪回缓冲区,并按顺序将闪回数据库数据从闪回缓冲区写入闪回数据库日志,这些日志会被循环重用。
(4)数据库缓冲区缓存
是存储从数据文件中读取的数据块副本的内存区域。缓冲区是一个主内存地址,缓冲区管理器在此临时缓存当前或最近使用的数据块。所有并发连接到数据库实例的用户都共享对缓冲区缓存的访问。
(5)(可选)True Cache
是 Oracle AI 数据库的一种内存中、一致且自动管理的 SQL 和键值(对象或 JSON)缓存。您可以使频繁访问的表在 True Cache 或主数据库(或两者)的数据库缓冲区缓存中持久存在。
(6)(可选)数据库智能闪存缓存
是针对运行在 Solaris 或 Oracle Linux 上的数据库的数据库缓冲区缓存的内存扩展。它为数据库块提供二级缓存。它既可以提高读取密集型联机事务处理 (OLTP) 工作负载的响应时间和整体吞吐量,也可以提高数据仓库 (DW) 环境中临时查询和批量数据修改的响应时间和整体吞吐量。数据库智能闪存缓存位于一个或多个闪存磁盘设备上,这些设备是使用闪存的固态存储设备。数据库智能闪存缓存通常比额外的主内存更经济,并且比磁盘驱动器快一个数量级。
(7)重做日志缓冲区
是 SGA 中的一个循环缓冲区,保存有关数据库更改的信息。此信息存储在重做条目中。重做条目包含通过 DML、数据定义语言 (DDL) 或内部操作重建(或重做)对数据库的更改所必需的信息。必要时,重做条目用于数据库恢复。
(8)(可选)大池
用于比共享池更适合的大型内存分配。大池可以为共享服务器和 Oracle XA 接口(用于事务与多个数据库交互的情况)的用户全局区 (UGA)、语句并行处理中使用的消息缓冲区、恢复管理器 (RMAN) I/O 工作进程的缓冲区以及延迟插入提供大型内存分配。
(9)(可选)内存区域
使对象(表、分区和其他类型)能够以列式格式存储在内存中。这种格式使扫描、连接和聚合的执行速度比传统的磁盘格式快得多,从而为 OLTP 和 DW 环境提供快速的报表和 DML 性能。此功能对于分析型应用程序特别有用,这些应用程序操作少数列并返回许多行,而不是 OLTP(操作少数行并返回许多列)。
(10)(可选)内存优化池
为基于键的查询提供高性能和可扩展性。内存优化池包含两部分:内存优化缓冲区区和哈希索引。快速查找利用内存优化池中的哈希索引结构,可以快速访问给定表(启用 MEMOPTIMIZE FOR READ)的块,这些块永 久固定在缓冲区缓存中以避免磁盘 I/O。内存优化池中的缓冲区与数据库缓冲区缓存完全分开。配置内存优化行存储时创建哈希索引,Oracle AI 数据库自动维护它。
(11)(可选)共享 I/O 池(SecureFiles)
用于对 SecureFile 大对象 (LOB) 进行大型 I/O 操作。LOB 是一组保存大量数据的数据类型。SecureFile 是一种 LOB 存储参数,允许去重、加密和压缩。
(12)(可选)流池
与 Oracle 数据泵和 Oracle GoldenGate 进程协同工作。流池存储缓冲队列消息。除非专门配置,否则流池的大小从零开始。
(13)(可选)Java 池
用于 Java 虚拟机 (JVM) 中所有特定于会话的 Java 代码和数据。Java 池内存的使用方式取决于 Oracle AI 数据库的运行模式。
(14)固定 SGA
是一个内部管理区域,包含有关数据库和数据库实例状态的一般信息,以及在进程之间通信的信息。
注释
程序全局区 (PGA) 是数据库实例中的一个非共享内存区域,包含专 供服务器进程或后台进程使用的数据和控制信息。Oracle AI 数据库创建服务器进程,代表客户端程序处理与数据库的连接。(该图显示了一个服务器进程的 PGA。)
在专用服务器环境中,Oracle AI 数据库为启动的每个服务器进程和后台进程创建一个 PGA。当关联的服务器进程或后台进程终止时,Oracle AI 数据库会释放 PGA。在专用服务器会话中,PGA 由以下组件组成:
(1)SQL 工作区包括用于排序数据(如 ORDER BY 和 GROUP BY)的排序区、用于执行表哈希连接的哈希区,以及用于合并从多个位图索引扫描中检索到的数据的位图合并区。
(2)用户全局区 (UGA) 是一个用户会话数据存储区,用于存储会话变量,例如登录信息以及数据库会话所需的其他信息,以及管理 OLAP 数据页(相当于数据块)的 OLAP 池。
(3)私有 SQL 区保存有关已解析 SQL 语句的信息以及用于处理的其他特定于会话的信息。当服务器进程运行 SQL 或 PL/SQL 代码时,该进程使用私有 SQL 区来存储绑定变量值、查询执行状态信息和查询执行工作区。相同或不同会话中的多个私有 SQL 区可以指向 SGA 中的同一个执行计划。持久区包含绑定变量值。运行时区包含查询执行状态信息。游标是指向私有 SQL 区中特定区域的名称或句柄。您可以将游标视为客户端上的指针和服务器上的状态。由于游标与私有 SQL 区密切相关,因此这两个术语有时可以互换使用。
在共享服务器环境中,多个客户端用户共享服务器进程。UGA 移入大池,PGA 仅保留 SQL 工作区和私有 SQL 区。
注释
后台进程是数据库实例的一部分,它们执行维护任务以操作数据库并最大化多用户性能。每个后台进程执行一个独特的任务,但与其他进程协同工作。当您启动数据库实例时,Oracle AI 数据库会自动创建后台进程。实际存在的后台进程取决于您正在使用的数据库功能。启动数据库实例时,强制后台进程会自动启动。您可以根据需要在以后启动可选后台进程。
强制后台进程存在于所有典型数据库配置中。这些进程在使用最小配置的初始化参数文件启动的读写数据库实例中默认运行。只读数据库实例会禁用其中一些进程。强制后台进程包括:进程监视器 (PMON)、进程管理器 (PMAN)、监听器注册 (LREG)、系统监视器 (SMON)、数据库写入器 (DBWn)、检查点 (CKPT)、可管理性监视器 (MMON)、可管理性监视器精简版 (MMNL)、恢复器 (RECO) 和日志写入器 (LGWR)。
大多数可选后台进程特定于某些任务或功能。一些常见的可选进程包括:归档器 (ARCn)、作业队列协调器 (CJQ0)、恢复写入器 (RVWR)、闪回数据归档 (FBDA) 和空间管理协调器 (SMCO)。
工作者进程是代表其他进程执行工作的后台进程。这些进程包括调度器 (Dnnn) 和共享服务器 (Snnn) 进程。

注释
共享池是数据库实例中系统全局区(SGA)的一个组件,负责缓存各种类型的程序数据。例如,共享池存储了解析后的SQL、PL/SQL代码、系统参数和数据字典信息。数据库中几乎每个操作都涉及共享池。例如,如果用户运行一条SQL语句,那么Oracle AI数据库就会访问共享池。
共享池由以下子组件构成:
(1)库缓存是共享池中的一个内存结构,用于存储可执行的SQL和PL/SQL代码。该缓存包含共享的SQL和PL/SQL区域以及控制结构(如锁和库缓存句柄)。当执行SQL语句时,数据库会尝试重用之前执行过的代码。如果库缓存中存在SQL语句的解析表示形式且可以共享,数据库便会重用该代码。此操作称为软解析或库缓存命中。否则,数据库必须构建应用程序代码的新可执行版本,这称为硬解析或库缓存未命中。
(2)保留池是共享池中的一个内存区域,Oracle AI数据库可使用它来分配大的连续内存块。数据库以块为单位从共享池分配内存。分块允许将大对象(超过5 KB)加载到缓存中,而无需单个连续区域。通过这种方式,数据库减少了因碎片而耗尽连续内存的可能性。
(3)数据字典缓存存储有关数据库对象(即字典数据)的信息。此缓存也称为行缓存,因为它以行而非缓冲区的形式保存数据。
(4)服务器结果缓存是共享池中的一个内存池,包含SQL查询结果缓存和PL/SQL函数结果缓存,它们共享相同的基础架构。SQL查询结果缓存存储查询和查询片段的结果。大多数应用程序都能从这种性能提升中受益。PL/SQL函数结果缓存存储函数结果集。适合结果缓存的候选者是那些频繁调用且依赖于相对静态数据的函数。
(5)其他组件包括队列、闩锁、信息生命周期管理(ILM)位图表、活动会话历史(ASH)缓冲区以及其他较小的内存结构。队列是用于序列化对数据库资源访问的共享内存结构(锁)。它们可以与进程或会话关联。例如控制文件事务、实例恢复、介质恢复、作业队列和行缓存。闩锁用作低级序列化控制机制,以保护SGA中的共享数据结构免受同时访问。例如缓存缓冲区链和重做分配。
注释
大池是数据库实例和系统全局区(SGA)内的一个可选内存区域。您可以配置大池,为以下区域提供大内存分配:
大池与共享池中的保留空间不同,后者使用与从共享池分配的其他内存相同的最近最少使用(LRU)列表。大池没有LRU列表。内存块被分配后,在使用完毕之前无法释放。
来自用户的请求是构成用户SQL语句一部分的单个API调用。
在专用服务器环境中,一个专用服务器进程处理单个客户端进程的请求。每个服务器进程都使用系统资源,包括CPU周期和内存。
在共享服务器环境中,发生以下操作:

注释
数据库缓冲区缓存,也简称为缓冲区缓存,是数据库实例系统全局区(SGA)中的一个内存区域。它存储从数据文件中读取的数据块的副本。缓冲区是缓冲区管理器临时缓存当前或最近使用过的数据块的主内存地址。所有并发连接到数据库实例的用户共享对缓冲区缓存的访问。缓冲区缓存的目标是优化物理I/O并将频繁访问的块保留在缓冲区缓存中。
当Oracle AI数据库客户端进程首 次需要特定数据时,它会在数据库缓冲区缓存中搜索该数据。如果进程发现数据已在缓存中(缓存命中),它可以直接从内存中读取数据。如果进程在缓存中找不到数据(缓存未命中),它会在访问数据之前将数据块从磁盘上的数据文件复制到缓存的缓冲区中。通过缓存命中访问数据比通过缓存未命中访问数据要快。
缓存中的缓冲区通过一种复杂的算法进行管理,该算法结合了最近最少使用(LRU)列表和接触计数。LRU有助于确保最近使用的块倾向于保留在内存中,从而最大限度地减少磁盘访问。
数据库缓冲区缓存由以下区域组成:
注释
内存区域是数据库实例中一个可选的系统全局区(SGA)组件。它包含内存列存储(IM列存储),该存储通过使用针对快速扫描优化的列式格式,将表和分区存储在内存中。IM列存储使得数据能够同时以传统的行格式(在缓冲区缓存中)和列式格式填充到SGA中。数据库透明地将联机事务处理(OLTP)查询(例如主键查找)发送到缓冲区缓存,并将分析和报表查询发送到IM列存储。在获取数据时,Oracle AI数据库还可以在同一查询中从两个内存区域读取数据。这种双格式架构不会使内存需求加倍。缓冲区缓存经过优化,可以以远小于数据库大小的规模运行。
您只应在IM列存储中填充性能最关键的数据。要将对象添加到IM列存储,请在创建或修改对象时打开其INMEMORY属性。您可以在表空间(针对该表空间中的所有新表和视图)、表、分区、子分区、物化视图或对象内的列子集上指定此属性。
IM列存储使用优化的存储单元(而非传统的Oracle数据块)来管理数据和元数据。内存压缩单元(IMCU)是一个压缩的、只读的存储单元,包含一个或多个列的数据。快照元数据单元(SMU)包含关联IMCU的元数据和事务信息。每个IMCU都映射到一个单独的SMU。
表达式统计信息库(ESS)是一个存储库,用于保存有关表达式计算的统计信息。ESS驻留在SGA中,同时也持久化存储在磁盘上。当启用IM列存储时,数据库会利用ESS来实现其内存表达式(IM表达式)特性。内存表达式单元(IMEU)是物化IM表达式和用户定义的虚拟列的存储容器。请注意,ESS独立于IM列存储。ESS是数据库的一个永 久组件,无法禁用。
从概念上讲,IMEU是其父IMCU的逻辑扩展。正如IMCU可以包含多个列一样,IMEU可以包含多个虚拟列。每个IMEU恰好映射到一个IMCU,并映射到相同的行集。IMEU包含其关联IMCU中数据的表达式结果。当IMCU被填充时,关联的IMEU也会被填充。
一个典型的IM表达式涉及一个或多个列(可能包含常量),并且与表中的行具有一对一的映射关系。例如,针对EMPLOYEES表的IMCU可能包含weekly_salary列的第1-1000行。对于存储在此IMCU中的行,IMEU计算自动检测到的IM表达式weekly_salary 52,以及用户定义的虚拟列quarterly_salary(定义为weekly_salary12)。IMCU中的第三行映射到IMEU中的第三行。
内存区域细分为两个池:
这两个池的相对大小由内部启发式算法决定。内存区域的大部分内存分配给1MB的池。内存区域的大小由初始化参数INMEMORY_SIZE(默认值为0)控制,并且最小大小必须为100MB。从Oracle Database 12.2开始,您可以通过ALTER SYSTEM命令将INMEMORY_SIZE参数增加至少128MB,从而动态增加内存区域的大小。请注意,无法动态缩小内存区域的大小。
Oracle AI数据库内存具有基础级别特性,允许您使用高达16GB的列存储,而不会触发任何许可跟踪。
当表数据首 次被访问或数据库启动时,内存表会在IM列存储中分配IMCU。通过将数据从磁盘格式转换为新的内存列式格式,来创建表的内存副本。每次实例重新启动时都会执行此转换,因为IM列存储副本仅驻留在内存中。完成此转换后,表的内存版本将逐渐可用于查询。如果表部分转换完成,查询可以使用部分内存版本,并访问磁盘以获取其余部分,而无需等待整个表转换完成。
当表中并非所有列都已填充到IM列存储中时,内存混合扫描可以从IM列存储中访问部分数据,并从行存储中访问部分数据。与纯行存储查询相比,这可以将性能提升数个数量级。
自动内存可以在无需用户干预的情况下启用、填充、逐出和重新压缩段。当INMEMORY_AUTOMATIC_LEVEL设置为HIGH时,数据库会根据段的使用模式自动启用和填充段。这种自动化有助于最大化一次可以填充到IM列存储中的对象数量。
为了响应查询和数据操作语言(DML),服务器进程会扫描列数据并更新SMU元数据。后台进程将行数据从磁盘填充到IM列存储中。内存协调器进程(IMCO)启动列数据的后台填充和重新填充。空间管理协调器进程(SMCO)和空间管理工作进程(Wnnn)代表IMCO执行实际的数据填充和重新填充。DML块更改被写入缓冲区缓存,然后写入磁盘。然后,后台进程根据元数据失效和查询请求,将行数据从磁盘重新填充到IM列存储中。
您可以启用内存快速启动特性,将IM列存储中的列数据以压缩列格式写回数据库的表空间。此特性可以加快数据库启动速度。请注意,此特性不适用于IMEU。IMEU始终是根据IMCU动态填充的。
内存深度向量化可以通过在单个SQL运算符内部流水线化物理运算符,并使用单指令多数据(SIMD)技术对其进行向量化,来优化复杂的SQL运算符。此特性默认启用,但您可以通过将INMEMORY_DEEP_VECTORIZATION初始化参数设置为false来禁用它。

注释
多租户容器数据库(CDB)是容器数据库的集合,其中每个容器都是模式、对象和相关结构的集合。可插拔数据库(PDB)是用户创建的容器,用于存储应用程序(例如人力资源应用程序)的数据和代码。
从用户或应用程序的角度来看,PDB 似乎是一个逻辑上独立的数据库。从操作系统的角度来看,CDB 就是数据库。
每个 CDB 都具有以下容器:
在物理层面,容器由物理数据文件组成。每个容器至少有一个数据文件。在逻辑层面,数据库通过称为表空间的逻辑结构在数据文件间分配数据。
CDB 在运行期间还使用多个系统文件。控制文件和联机重做日志文件驻留在 CDB 中,并在所有 PDB 和应用容器之间共享。其他系统文件驻留在 CDB 之外。
注意:非 CDB 在 Oracle Database 21c 中已被弃用,这意味着 Oracle 通用安装器和数据库配置助手(DBCA)无法再创建非 CDB Oracle AI 数据库实例。

注释
应用程序容器是多租户容器数据库(CDB)中一个可选的、用户创建的组件。应用程序容器为特定于应用程序的可插拔数据库(PDB)存储数据和元数据。
在某些方面,应用程序容器在 CDB 内充当特定于应用程序的 CDB。与 CDB 本身一样,应用程序容器可以包含多个应用程序 PDB,并使这些 PDB 能够共享数据和元数据,其方式与 CDB 根与种子 PDB、用户创建的 PDB 以及插入到 CDB 根的应用程序容器共享数据和元数据的方式相同。
一个 CDB 可以包含零个或多个应用程序容器。一个应用程序容器恰好由一个应用程序根和一个或多个插入到该应用程序根的应用程序 PDB 组成。应用程序根属于 CDB 根。应用程序根既不同于 CDB 根,也不同于标准 PDB,因为它可以存储用户创建的公共对象,这些对象可供插入到该应用程序根的应用程序 PDB 访问。
应用程序种子是应用程序容器内一个可选的、用户创建的 PDB。一个应用程序容器可以有零个或一个应用程序种子。应用程序种子使您能够快速创建应用程序 PDB。它在应用程序容器中的作用与种子 PDB 在 CDB 本身中的作用相同。
在物理层面,容器由物理数据文件组成。每个容器至少有一个数据文件。在逻辑层面,数据库通过称为表空间的逻辑结构在数据文件间分配数据。
典型的应用程序会安装应用程序公共用户、元数据链接的公共对象以及数据链接的公共对象。例如,您可以在一个应用程序容器内创建多个与销售相关的 PDB,这些 PDB 共享一个由一组公共表和表定义组成的应用程序后端。

注释
多租户容器数据库(CDB)是模式以及模式对象(例如表和索引)的集合。
在物理层面,CDB 将对象存储在数据文件中。您可以使用以下机制来存储数据文件:
在逻辑层面,CDB 通过以下结构在数据文件间分配数据:
注释
表空间是用于段的逻辑存储容器。段是消耗存储空间的数据库对象,例如表和索引。
在多租户容器数据库(CDB)中,每个可插拔数据库(PDB)和应用程序根都有自己的一组永 久表空间,这些表空间对应于物理数据文件:
每个容器还有一个临时表空间,对应于物理临时文件。CDB根以及每个应用程序根、应用程序PDB和PDB都存在一个默认临时表空间。临时表空间包含仅在一个会话期间持续存在的临时数据。没有永 久模式对象可以驻留在临时表空间中。

注释
数据库模式是数据结构(称为模式对象)的逻辑容器。每个 Oracle AI 数据库用户帐户拥有一个单一模式,该模式与用户同名。
注意:数据库还存储其他类型的对象,这些对象不包含在模式中。这些对象包括数据库用户帐户、角色、上下文和字典对象。
已分配物理空间的模式对象(如表和索引)存储在数据文件中。在逻辑层面,数据库通过表空间在数据文件间分配数据。模式和表空间之间没有关系:一个表空间可以包含来自不同模式的对象,而一个模式的对象可以包含在不同的表空间中。
模式包括以下主要对象类型:

注释
Oracle AI 数据库使用多个驻留在数据库服务器上的数据库系统文件。这些文件不同于数据文件,数据文件是属于数据库容器的物理文件。
以下文件是数据库启动所必需的:
注意:Oracle 建议您在单独的位置维护控制文件和联机重做日志文件的多个副本,以避免单点故障。这称为多路复用。有关详细信息,请参阅多个控制文件和联机重做日志文件的多个副本。
数据库还使用以下驻留在 CDB 外部的系统文件:

注释
自动诊断存储库(ADR)是一个系统级的跟踪和日志记录中央存储库,用于存储数据库诊断数据。它包括以下项目:
注释
您可以创建以下类型的备份:
使用 RMAN 时,您可以将以下类型的备份格式存储在磁盘上:
RMAN 还可以与媒体管理库(MML)或系统备份到磁带(SBT)软件接口,这些软件可以创建备份到磁带、Oracle 数据库备份云服务或零数据丢失恢复一体机(通常称为恢复一体机)。
注释
进程监视器进程(PMON)定期扫描所有进程,以发现任何异常终止的进程。PMON 将清理工作委托给清理主进程(CLMN),后者定期执行终止进程和会话的清理工作。CLMN 将任务委托给清理工作进程(CLnn)。
PMON 作为操作系统进程运行,而非线程。除了数据库实例之外,PMON 还在 Oracle 自动存储管理(Oracle ASM)实例和 Oracle ASM 代理实例上运行。

注释
进程管理器进程(PMAN)负责监督多个后台进程,包括共享服务器、池化服务器和作业队列进程。PMAN 根据需要监视、生成和停止以下类型的进程:
PMAN 作为操作系统进程运行,而非线程。除了数据库实例之外,PMAN 还在 Oracle 自动存储管理(Oracle ASM)实例和 Oracle ASM 代理实例上运行。
注释
监听器注册进程(LREG)将有关实例、服务、处理程序和端点的信息通知给监听器。
LREG 可以作为线程或操作系统进程运行。除了数据库实例之外,LREG 还在 Oracle 自动存储管理(Oracle ASM)实例和 Oracle 实时应用集群(Oracle RAC)上运行。

注释
系统监视器进程(SMON)执行许多数据库维护任务,包括以下内容:
SMON 能够容受后台活动期间发生的内部和外部错误。SMON 可以作为线程或操作系统进程运行。在 Oracle 实时应用集群(Oracle RAC)数据库中,一个实例的 SMON 进程可以为其他已失败的实例执行实例恢复。
注释
数据库写入器进程(DBWn)读取数据库缓冲区缓存并将修改后的缓冲区写入数据文件。它还处理检查点、文件打开同步以及已写入块记录的日志记录。当配置了数据库智能闪存缓存(闪存缓存)时,DBWn 也会读取该缓存。
在许多情况下,DBWn 写入的块分散在磁盘各处,因此这些写入往往比日志写入器进程(LGWR)执行的顺序写入要慢。DBWn 尽可能执行多块写入以提高效率。多块写入中写入的块数因操作系统而异。
初始化参数 DB_WRITER_PROCESSES 指定了数据库写入器进程的数量。可以有 1 到 100 个数据库写入器进程。前 36 个数据库写入器进程的名称为 DBW0-DBW9 和 DBWa-DBWz。第 37 到第 100 个数据库写入器进程的名称为 BW36-BW99。数据库会为 DB_WRITER_PROCESSES 参数选择合适的默认设置,或根据 CPU 数量和处理器组调整用户指定的设置。

注释
检查点进程(CKPT)在特定时间通过触发数据库写入器进程(DBWn)来启动检查点请求,以读取数据库缓冲区缓存并将修改后的缓冲区写入数据文件。在单个检查点请求完成后,CKPT 更新数据文件头和控制文件,以记录最近的检查点。
CKPT 每三秒检查一次内存使用量是否超过初始化参数 PGA_AGGREGATE_LIMIT 的值,如果超过,则采取相应措施。
CKPT 可以作为线程或操作系统进程运行。除了数据库实例之外,CKPT 还在 Oracle 自动存储管理(Oracle ASM)实例上运行。

注释
可管理性监视器进程(MMON)和可管理性监视器轻量级进程(MMNL)执行与自动工作负载存储库(AWR)相关的任务。AWR 是一个历史性能数据存储库,包含系统、会话、单个 SQL 语句、段和服务的累积统计信息。它提供问题检测和自动调优功能。AWR 驻留在 SYSAUX 表空间中。AWR 报告可以在 CDB 根或任何 PDB 中生成。有关 AWR 如何在多租户容器数据库(CDB)中工作的更多信息,请参阅关于在 CDB 中使用可管理性特性。
MMON 从系统全局区(SGA)收集内存统计信息,对其进行过滤,并每隔 60 分钟(或您选择的其他时间间隔)在 AWR 中创建这些统计信息的快照。它还执行自动数据库诊断监视器(ADDM)分析,并为超过阈值的度量发出警报。
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 还负责计算度量值。
MMON 和 MMNL 都可以作为线程或操作系统进程运行。除了数据库实例之外,MMON 和 MMNL 还在 Oracle 自动存储管理(Oracle ASM)实例上运行。

注释
恢复器进程(RECO)负责解决分布式数据库系统中因网络或系统故障而挂起的分布式事务。分布式数据库系统是一组数据库服务器的集合,对应用程序而言可视为单一数据源。
节点的 RECO 进程自动连接到涉及存疑分布式事务的其他数据库。当 RECO 重新建立数据库之间的连接时,它会自动解决所有存疑事务,并从每个数据库的待定事务表中删除与已解决事务相对应的所有行。
RECO 可以作为线程或操作系统进程运行。

注释
服务器进程将数据块的更改写入数据库缓冲区缓存,并将重做数据写入重做日志缓冲区。日志写入器进程(LGWR)将重做日志条目按顺序从重做日志缓冲区写入联机重做日志。如果数据库配置了多路复用重做日志,则 LGWR 会将相同的重做日志条目写入重做日志文件组的所有成员。
LGWR 处理那些速度非常快或必须协调的操作。它将可从并发操作中受益的操作委托给日志写入器工作进程(LGnn),这些进程编号为 LG00-LG99。这些操作包括将重做信息从日志缓冲区写入重做日志文件,以及将写入完成的消息通知给正在等待的服务器进程。
重做传输工作进程(TTnn),编号为 TT00-TTzz,负责将重做信息从当前的联机重做日志和备用重做日志传输到配置为异步(ASYNC)重做传输的远程备用目的地。
LGWR 可以作为线程或操作系统进程运行。除了数据库实例之外,LGWR 还在 Oracle 自动存储管理(Oracle ASM)实例上运行。在 Oracle 实时应用集群(Oracle RAC)配置中,每个数据库实例都有自己的一组重做日志文件。

注释
归档进程(ARCn)仅在数据库处于 ARCHIVELOG 模式且启用了自动归档时才存在,在这种情况下,ARCn 会自动归档联机重做日志文件。日志写入器进程(LGWR)在联机重做日志组被归档之前,不能重用或覆盖该组。
数据库会根据需要启动多个 ARCn 进程,以确保已填满的联机重做日志的归档不会落后。可能的进程包括 ARC0-ARC9 和 ARCa-ARCt(共 31 个可能的目的地)。
初始化参数 LOG_ARCHIVE_MAX_PROCESSES 指定了数据库初始调用的 ARCn 进程数量。如果您预计归档工作负载很重(例如在批量加载数据期间),可以增加 ARCn 进程的最大数量。同时也可以有多个归档日志目标位置。Oracle 建议为每个目标位置至少配置一个 ARCn 进程。
ARCn 可以作为线程或操作系统进程运行。
注释
作业队列协调器进程(CJQ0)从数据字典中选择需要运行的作业,并生成作业队列工作进程(Jnnn)来执行这些作业。Oracle Scheduler 会根据需要自动启动和停止 CJQ0。初始化参数 JOB_QUEUE_PROCESSES 指定了可为运行作业创建的最大进程数量。CJQ0 仅根据待运行作业数量和可用资源启动所需数量的作业队列进程。
Jnnn 进程负责运行由作业协调器分配的作业。当工作进程选择作业进行处理时,它们会执行以下操作:
当作业完成后,工作进程会执行以下操作:
CJQ0 和 Jnnn 都可以作为线程或操作系统进程运行。
注释
当您使用闪回数据库时,恢复写入器进程(RVWR)会从系统全局区(SGA)中的闪回缓冲区读取闪回数据,并将其写入闪回日志。也就是说,只要您拥有所需的闪回日志,它就可以将事务从数据库的当前状态回退到过去的某个时间点。
RVWR 可以作为线程或操作系统进程运行。

注释
当您使用闪回数据库时,闪回数据归档进程(FBDA)会在表的整个生命周期内跟踪和存储其事务变更。通过这种方式,您可以闪回表,将它们恢复到过去某个时间点的状态。
当修改已跟踪表的事务提交时,FBDA 会读取数据库缓冲区缓存中的还原块以及数据文件中的还原段。然后,它会筛选出与标记为归档的对象相关的内容,并将这些还原信息复制到数据文件中的闪回数据归档(表空间)中。FBDA 维护当前行的元数据,并跟踪已归档的数据量。
FBDA 自动管理闪回数据归档的空间、组织(分区表空间)和保留策略。此外,FBDA 还会跟踪已跟踪事务归档的进度。
FBDA 可以作为线程或操作系统进程运行。
注释
可选的空間管理協調器进程(SMCO)负责调度各种空间管理任务,包括主动空间分配和空间回收。SMCO 动态生成空间管理工作进程(Wnnn)来执行这些任务。启动后,工作进程充当自治代理。完成任务后,工作进程会自动从队列中选取另一项任务。在空闲较长时间后,该进程会自行终止。
Wnnn 工作进程(命名为 W001、W002 等)代表空间管理以及 Oracle AI 数据库内存选项执行任务。
对于空间管理,Wnnn 进程在后台执行空间管理任务,包括以下内容:
对于 Oracle AI 数据库内存选项,Wnnn 进程执行以下任务:
SMCO 和 Wnnn 都可以作为线程或操作系统进程运行。
注释
在共享服务器环境中,调度器进程(Dnnn)将多个传入的网络会话请求定向到共享服务器进程(Snnn)池。您可以为单个数据库实例创建多个调度器进程。
Oracle Net 监听器进程建立与调度器的连接。当客户端进程发出需要共享服务器进程的连接请求时,监听器会返回调度器的地址,以便客户端进程在连接建立后可以直接与调度器通信。
调度器将客户端请求放入数据库实例系统全局区(SGA)的大池中的请求队列里。下一个可用的共享服务器进程拾取该请求并进行处理。请求完成后,共享服务器进程将响应放入大池中调用方调度器的响应队列,然后响应队列将响应发送给调度器。调度器将完成的请求返回给客户端进程。
Snnn 和 Dnnn 都可以作为线程或操作系统进程运行。除了数据库实例之外,Dnnn 也在共享服务器环境中运行。
https://docs.oracle.com/en/database/oracle/oracle-database/26/administration.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbserver.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbinstance.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_sga.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_pga.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_backgroundprocesses.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_sharedpool.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_largepool.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbbuffercache.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_inmemoryarea.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_cdb.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_appcontainer.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_datafiles.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_tablespaces.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_schemas.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbfiles.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_adr.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_backupfiles.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_PMON.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_PMAN.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_LREG.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_SMON.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_DBWn.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_CKPT.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_MMON_MMNL.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_RECO.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_LGWR.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_ARCn.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_CJQ0.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_RVWR.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_FBDA.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_SMCO.html https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_Dnnn_Snnn.html
欢迎关注我的公众号《 IT小Chen》
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29785807/viewspace-3111715/ ,如需转载,请注明出处,否则将追究法律责任。