进程体系结构

本章讨论 Oracle 数据库中的进程。

流程简介

进程是操作系统中可以运行一系列步骤的机制。

进程执行体系结构取决于操作系统。例如,在 Windows 上,Oracle 后台进程是进程内的执行线程。在 Linux 和 UNIX 上,Oracle 进程是操作系统进程中的操作系统进程或线程。

处理运行代码模块。所有连接的 Oracle AI Database 用户都必须运行以下模块才能访问数据库实例:

进程通常在自己的专用内存区域中运行。大多数进程可以定期写入关联的跟踪文件。

另请参见:

流程类型

数据库实例包含多个进程或与多个进程交互。

进程分为以下类型:

进程结构因操作系统和 Oracle AI Database 选项的选择而异。例如,可以为专用服务器或共享服务器连接的已连接用户配置代码。在共享服务器体系结构中,运行数据库代码的每个服务器进程都可以为多个客户机进程提供服务。图 18-1 显示了使用专用服务器连接的系统全局区 (system global area,SGA) 和后台进程。对于每个用户连接,客户机进程运行应用程序。此客户机进程与运行数据库代码的专用服务器进程不同。每个客户机进程都与其自己的服务器进程相关联,该进程具有自己的程序全局区 (program global area,PGA) 。

图 1:Oracle 进程和 SGA

插图 cncpt283.png 的说明

另请参见:

多进程和多线程 Oracle AI Database 系统

多进程 Oracle AI Database(也称为多用户 Oracle AI Database)使用多个进程为用户运行 Oracle AI Database 代码的不同部分和其他 Oracle 进程,每个连接的用户可以运行一个进程,也可以运行多个用户共享的一个或多个进程。

大多数数据库都是多用户数据库,因为数据库的主要优势是同时管理多个用户所需的数据。数据库实例中的每个进程都会执行特定的作业。通过将数据库和应用程序的工作分成多个进程,多个用户和应用程序可以同时连接到一个实例,同时系统提供良好的性能。

在早于 Oracle Database 12c 的发行版中,Oracle 进程未在 UNIX 和 Linux 系统上作为线程运行。从 Oracle Database 12c 开始,多线程 Oracle AI Database 模型支持 Oracle 进程在单独的地址空间中作为操作系统线程执行。安装 Oracle AI Database 后,数据库将以进程模式运行。必须将 THREADED_EXECUTION 初始化参数设置为 TRUE 才能在线程模式下运行数据库。在线程模式下,UNIX 和 Linux 上的某些后端进程作为进程(每个进程包含一个线程)运行,而其余 Oracle 进程作为进程中的线程运行。

在以线程模式运行的数据库中,PMON 和 DBW 可能作为操作系统进程运行,而 LGWR 和 CMON 可能作为单个进程中的线程运行。两个前台进程和并行执行 (PX) 服务器进程可能在第二个操作系统进程中作为线程运行。第三个操作系统进程可能包含多个前台线程。因此,“Oracle 流程”并不总是指“操作系统流程”。注:将 THREADED_EXECUTION 初始化参数设置为 TRUE 时,不支持操作系统验证。

示例 18-1 查看 Oracle Process 元数据

V$PROCESS 视图针对连接到数据库实例的每个 Oracle 进程包含一行。例如,可以在 SQL*Plus 中运行以下查询,以获取每个进程的操作系统进程 ID 和操作系统线程 ID:

COL SPID FORMAT a8
COL STID FORMAT a8
SELECT SPID, STID, PROGRAM FROM V$PROCESS ORDER BY SPID;

该查询将生成以下部分示例输出:

SPID   STID   PROGRAM
-----  -----  ---------------------------
7190   7190   oracle@samplehost (PMON)
7192   7192   oracle@samplehost (PSP0)
7194   7194   oracle@samplehost (VKTM)
7198   7198   oracle@samplehost (SCMN)
7198   7200   oracle@samplehost (GEN0)
7202   7202   oracle@samplehost (SCMN)
7202   7204   oracle@samplehost (DIAG)
7198   7205   oracle@samplehost (DBRM)
7202   7206   oracle@samplehost (DIA0)
.
.
.

另请参见:

客户机进程概览

当用户运行应用程序(例如 Pro*C 程序或 SQL*Plus)时,操作系统会创建一个客户机进程(有时称为用户进程)来运行用户应用程序。客户端应用程序中链接了 Oracle AI Database 库,这些库提供了与数据库通信所需的 API。

客户端和服务器进程

客户机进程与直接与实例交互的 Oracle 进程在重要方面有所不同。

为客户机进程提供服务的 Oracle 进程可以从 SGA 读取和写入,而客户机进程无法读取。客户机进程可以在数据库主机以外的主机上运行,而 Oracle 进程无法运行。

例如,假定客户机主机上的用户启动 SQL*Plus,然后在未启动数据库实例时通过网络连接到其他主机上的数据库 sample:

SQL> CONNECT SYS@inst1 AS SYSDBA
Enter password: *********
Connected to an idle instance.

在客户机主机上,搜索 sqlplus 或 sample 的进程仅显示 sqlplus 客户机进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep
clientuser 29437 29436  0 15:40 pts/1    00:00:00 sqlplus           as sysdba

在数据库主机上,搜索 sqlplus 或 sample 的进程将显示具有非本地连接的服务器进程,但没有客户机进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep
serveruser 29441     1  0 15:40 ?        00:00:00 oraclesample (LOCAL=NO)

另请参阅:“如何启动实例”以了解客户机在未启动实例时如何连接到数据库

连接和会话

数据库连接是客户机进程与数据库实例之间的物理通信路径。

在连接期间,使用可用的进程间通信机制或网络软件建立通信路径。通常,客户机进程与服务器进程或分派程序之间会发生连接,但也可能在客户机进程与 Oracle Connection Manager (CMAN) 之间发生连接。

当前容器

数据库会话是数据库实例内存中的逻辑实体,表示当前用户登录到数据库的状态。

例如,当数据库使用口令对用户进行验证时,会为此用户建立会话。会话从数据库通过用户的验证开始,持续到用户断开连接或离开该数据库应用程序为止。

会话和容器

对于给定会话,CDB 中的当前容器是运行会话的容器。当前容器可以是 CDB 根、应用程序根或 PDB。

每个会话在任何时间点都只有一个当前容器。由于每个容器中的数据字典是分开的,因此 Oracle AI Database 使用当前容器中的数据字典进行名称解析和权限授权。

连接和会话之间的关系

单个连接上可以建立 0 个、1 个或更多会话。会话是独立的:一个会话中的提交不会影响其他会话中的事务。

注:如果配置了 Oracle Net 连接池,则连接可能会删除,但会话保持不变。

单个数据库用户可以同时存在多个会话。如下图所示,用户 hr 可以与数据库建立多个连接。在专用服务器连接中,数据库将代表每个连接创建一个服务器进程。只有导致创建专用服务器的客户机进程才使用它。在共享服务器连接中,许多客户机进程访问单个共享服务器进程。

图 2:每个连接一个会话

插图 cncpt237.gif 的说明

图 18-3 说明了用户 hr 与数据库的单个连接,但此连接有两个会话的情况。

图 3:一个连接中的两个会话

插图 cncpt238.gif 的说明

生成 SQL 语句执行统计信息的自动跟踪报告会重新创建图 18-3 中的方案。

Example 18-2 中的 DISCONNECT 命令实际上结束 sessions ,而不是连接。

示例 18-2 连接和会话

以下示例以 SYSTEM 用户身份将 SQL*Plus 连接到数据库并启用跟踪,从而创建新会话(包括示例输出):

SQL> SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;

SID SERIAL# PADDR
--- ------- --------
 90      91 3BE2E41C

SQL> SET AUTOTRACE ON STATISTICS;
SQL> SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;

SID SERIAL# PADDR
--- ------- --------
 88      93 3BE2E41C
 90      91 3BE2E41C
...
SQL> DISCONNECT

DISCONNECT 命令实际上结束 sessions ,而不是连接。打开新终端并以其他用户身份连接到实例,以下查询显示地址为 3BE2E41C 的连接仍处于活动状态。

SQL> CONNECT dba1@inst1
Password: ********
Connected.
SQL> SELECT PROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3BE2E41C');

PROGRAM
------------------------------------------------
oracle@stbcs09-1 (TNS V1-V3)

另请参见:“共享服务器体系结构”

数据库操作

在数据库监视的上下文中,数据库操作是两个时间点之间的会话活动,由最终用户或应用程序代码定义。

简单数据库操作是单个 SQL 语句,或者是单个 PL/SQL 过程或函数。复合数据库操作是一组单个或组合操作。

要监视、比较和优化任务,可以将一组大型任务分成数据库操作,并将操作分成几个阶段。用例是运行速度比正常运行速度慢的 PL/SQL 批处理作业。通过将作业配置为数据库操作,可以标识并优化作业中的昂贵步骤。

数据库操作的每次执行都由一对属性(操作名称和执行 ID)唯一标识。一个会话可以通过指定其会话 ID 和序列号来启动或停止其他会话中的数据库操作。

同一数据库操作的两个实例可以使用相同的名称但不同的执行 ID 同时执行。每个具有相同名称的数据库操作的执行可以包含不同的语句。

可以使用 DBMS_SQL_MONITOR PL/SQL 程序包创建和管理数据库操作。您可以使用 V$SQL_MONITOR、V$SQL_PLAN_MONITOR 和 V$SQL_MONITOR_SESSTAT 监视操作。

另请参见:

服务器进程概览

Oracle AI Database 创建服务器进程来处理连接到实例的客户机进程的请求。客户机进程始终通过单独的服务器进程与数据库通信。

代表数据库应用程序创建的服务器进程可以执行以下一项或多项任务:

专用服务器进程

在专用服务器连接中,客户机连接与一个且仅一个服务器进程关联。

在 Linux 上,连接到数据库实例的 20 个客户机进程由 20 个服务器进程提供服务。每个客户机进程都与其服务器进程直接通信。此服务器进程在会话期间专用于其客户机进程。服务器进程将特定于进程的信息和 UGA 存储在其 PGA 中。

另请参见:

共享服务器进程

在共享服务器连接中,客户机应用程序通过网络连接到分派程序进程,而不是服务器进程。例如,20 个客户机进程可以连接到单个分派程序进程。

分派程序进程接收来自已连接客户机的请求,并将它们放入大型池中的请求队列中。第一个可用的共享服务器进程从队列中获取请求并对其进行处理。之后,共享服务器将结果放置到分派程序响应队列中。分派程序进程监视此队列并将结果传输给客户机。

与专用服务器进程一样,共享服务器进程也有自己的 PGA。但是,会话的 UGA 位于 MGA 中,以便任何共享服务器都可以访问会话数据。

另请参见:

Oracle AI Database 如何创建服务器进程

数据库以各种方式创建服务器进程,具体取决于连接方法。

连接方法如下所示:

当连接不使用 bequeath 时,数据库将按如下方式创建服务器进程:

  1. 客户机应用程序从监听程序或中介请求新的连接。

  2. 监听程序或中介启动新进程或线程的创建。

  3. 操作系统会创建新进程或线程。

  4. Oracle AI Database 初始化各种组件和通知。

  5. 数据库移交连接和特定于连接的代码。

(可选)如果使用专用中介连接方法,则可以使用 DBMS_PROCESS 软件包预先创建服务器进程池。在这种情况下,进程管理器 (Process Manager,PMAN) 后台进程会监视预先创建的进程池,这些进程等待与客户机请求关联。当连接需要服务器进程时,数据库将跳过进程创建的步骤 2-4,并且仅执行步骤 5。此优化可提高性能。

注意:

后台进程概述

后台进程是多进程 Oracle 数据库使用的其他进程。后台进程执行运行数据库所需的维护任务,并最大限度地提高多个用户的性能。

每个后台流程都有一个单独的任务,但与其他流程一起使用。例如,LGWR 进程将数据从重做日志缓冲区写入联机重做日志。当填充的重做日志文件已准备好进行归档时,LGWR 会向另一个进程发出归档重做日志文件的信号。

Oracle AI Database 在数据库实例启动时自动创建后台进程。实例可以具有许多后台进程,但并非所有后台进程都始终存在于每个数据库配置中。以下查询列出在数据库上运行的后台进程:

SELECT PNAME
FROM   V$PROCESS
WHERE  PNAME IS NOT NULL
ORDER BY PNAME;

此部分包含以下主题:

必备后台流程

所有典型的数据库配置中都存在必需的后台进程。

这些进程默认在以最小配置初始化参数文件启动的读/写数据库实例中运行。只读数据库实例将禁用其中一些进程。

本节介绍以下必备后台流程:

另请参见:

进程监视器进程 (PMON) 组

PMON 组包括 PMON、Cleanup Main Process (CLMN) 和 Cleanup Helper Processes (CL nn )。这些流程负责监控和清理其他流程。

PMON 组监督缓冲区高速缓存的清理和客户机进程使用的资源的释放。例如,PMON 组负责重置活动事务处理表的状态、释放不再需要的锁,以及从活动进程列表中删除已终止进程的进程 ID。

数据库必须确保已终止进程占用的资源已释放,以便其他进程可以使用这些资源。否则,进程可能最终被阻止或陷入争用。

进程监视程序处理 (PMON)

进程监视器 (process monitor,PMON) 检测其他后台进程的终止。如果服务器或分派程序进程异常终止,则 PMON 组将负责执行进程恢复。进程终止可能有多种原因,包括操作系统终止命令或 ALTER SYSTEM KILL SESSION 语句。

清除主进程 (CLMN)

PMON 将清理工作委托给清理主进程 (Cleanup main Process,CLIMN)。检测异常终止的任务仍保留在 PMON 中。

CLMN 定期对已终止的进程、已终止的会话、事务、网络连接、空闲会话、分离的事务以及超出了其空闲超时的分离网络连接执行清理。

清除帮助程序进程 (CLnn)

CLMN 将清理工作委托给 CL nn 帮助程序进程。

CL nn 进程可帮助清除已终止的进程和会话。帮助程序进程数与要完成的清理工作量和当前清理的效率成正比。

清除进程可能会被阻止,这会阻止清除进程继续清除其他进程。此外,如果多个进程需要清除,则清除时间可能很重要。出于这些原因,Oracle AI Database 可以并行使用多个帮助程序进程来执行清理,从而减轻性能下降。

V$CLEANUP_PROCESS 和 V$DEAD_CLEANUP 视图包含有关 CLMN 清除的元数据。V$CLEANUP_PROCESS 视图为每个清除进程包含一行。例如,如果 V$CLEANUP_PROCESS.STATE 为 BUSY,则该进程当前正在进行清理。

另请参阅:Oracle AI Database Reference 以了解有关 V$CLEANUP_PROCESS 的更多信息

数据库资源隔离

如果进程或会话终止,则 PMON 组会将保留的资源释放到数据库中。在某些情况下,PMON 组可以自动隔离损坏且不可恢复的资源,以便不会立即强制终止数据库实例。

PMON 组继续对持有隔离资源的进程或会话执行尽可能多的清除。V$QUARANTINE 视图包含元数据,例如资源类型、消耗的内存量、导致隔离的 Oracle 错误等。

另请参阅:Oracle AI Database Reference 以了解有关 V$QUARANTINE 的更多信息

流程管理器 (PMAN)

Process Manager (PMAN) 监视多个后台进程,包括共享服务器、池化服务器和作业队列进程。

PMAN 监视、生成和停止以下类型的进程:

监听程序注册流程 (LREG)

监听程序注册流程 (LREG) 将有关数据库实例和分派程序流程的信息注册到 Oracle Net Listener。

实例启动时,LREG 会轮询监听程序以确定其是否正在运行。如果监听程序正在运行,则 LREG 将传递相关参数。如果它未运行,则 LREG 会定期尝试与其联系。

注:在 Oracle Database 12c 之前的发行版中,PMON 执行了监听程序注册。

另请参阅:“Oracle Net Listener ”

系统监视程序过程 (SMON)

系统监视进程 (system monitor process,SMON) 负责各种系统级清理职责。

分配给 SMON 的职责包括:

SMON 定期检查自身是否被需要。如果其他进程检测到需要 SMON,则会对其进行调用。

数据库写程序进程 (DBW)

数据库写进程 (database writer process,DBW) 将数据库缓冲区的内容写入数据文件。DBW 将数据库缓冲区高速缓存中修改后的缓冲区写入磁盘。

虽然一个数据库写进程 (DBW0) 对大多数系统来说已足够,但如果您的系统大量修改数据,则可以配置其他进程(DBW1 到 DBW9、DBWa 到 DBWz 以及 BW36 到 BW99)来提高写入性能。这些附加的 DBW 进程在单处理器系统上没有用处。

DBW 进程在以下情况下将脏缓冲区写入磁盘:

在许多情况下,DBW 写入的块会分散在整个磁盘中。因此,写入往往比 LGWR 执行的顺序写入要慢。DBW 尽可能执行多块写入以提高效率。在多块写入中写入的块数因操作系统而异。

另请参见:

日志写程序进程 (LGWR)

日志写进程 (log writer process,LGWR) 管理联机重做日志缓冲区。

LGWR 将缓冲区的一部分写入联机重做日志。通过分离修改数据库缓冲区、执行脏缓冲区到磁盘的分散写入以及执行重做到磁盘的快速顺序写入等任务,数据库可以提高性能。

在以下情况下,LGWR 会写入从上次编写以来已复制到缓冲区的所有重做条目:

LGWR 和提交

Oracle AI Database 使用快速提交机制来提高已提交事务处理的性能。

当用户发出 COMMIT 语句时,会为该事务处理分配一个系统更改号 (system change number,SCN) 。LGWR 将提交记录放置在重做日志缓冲区中,并立即将其写入磁盘,以及提交 SCN 和事务处理的重做条目。

重做日志缓冲区是循环的。当 LGWR 将重做条目从重做日志缓冲区写入到联机重做日志文件时,服务器进程可以将新条目复制到重做日志缓冲区中已写入磁盘的条目之上。LGWR 写入速度通常足够快,可确保即使在对于重做日志的访问量极小时,缓冲区中也始终有可用于新条目的空间。

包含事务处理提交记录的重做条目的原子写入是确定事务处理已提交的单个事件。虽然数据缓冲区尚未写入磁盘,但 Oracle AI Database 会向提交事务处理返回成功代码。对数据块的相应更改将延迟,直到 DBW 有效地将其写入数据文件为止。

注: LGWR 可以在提交事务处理之前将重做日志条目写入磁盘。只有在以后提交事务处理时,由重做条目保护的更改才会成为永久更改。

当活动高时,LGWR 可以使用组提交。例如,用户提交,导致 LGWR 将事务的重做条目写入磁盘。在此写入期间,其他用户提交。在之前的写入完成之前,LGWR 无法写入磁盘以提交这些事务。完成后,LGWR 可以在一个操作中写入等待事务处理的重做条目列表(尚未提交)。通过这种方式,数据库可以最大限度地减少磁盘 I/O 并最大限度地提高性能。如果提交请求以较高的速率继续,则 LGWR 的每次写入都可以包含多个提交记录。

LGWR 和无法访问的文件

LGWR 同步写入到活动的镜像联机重做日志文件组。

如果日志文件不可访问,则 LGWR 会继续写入组中的其他文件,并将错误写入 LGWR 跟踪文件和警报日志。如果某个组中的所有文件都已损坏,或者该组因未归档而不可用,则 LGWR 无法继续运行。

另请参见:

检查点进程 (CKPT)

检查点进程 (checkpoint process,CKPT) 使用检查点信息更新控制文件和数据文件标头,并指示 DBW 将块写入磁盘。检查点信息包括用于开始恢复的联机重做日志中的检查点位置、SCN 和位置。

如 Figure 18-4 所示,CKPT 不会将数据块写入数据文件或重做块到联机重做日志文件。

图 4:检查点进程

插图 cncpt228.gif 的说明

另请参阅:“检查点概述”

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

manageability monitor process (MMON) 可执行与 Automatic Workload Repository (AWR) 相关的许多任务。

例如,当 metric 违反其阈值、获取快照以及捕获最近修改的 SQL 对象的统计信息值时,MMON 会进行写入。

可管理性监视器精简进程 (Manageability Monitor Lite Process,MMNL) 将统计信息从 SGA 中的活动会话历史记录 (Active Session History,ASH) 缓冲区写入到磁盘。ASH 缓冲区已满时,MMNL 会写入磁盘。

另请参阅:“Oracle AI Database 入门性能优化”和“活动会话历史记录概览”

恢复程序进程 (RECO)

在分布式数据库中, recoverer 进程 (RECO) 会自动解决分布式事务处理中的故障。

节点的 RECO 进程会自动连接到怀疑分布式事务中涉及的其他数据库。当 RECO 重新建立数据库之间的连接时,它会自动解析所有不确定的事务,从每个数据库的待处理事务表中删除与已解析事务对应的任何行。

另请参阅:Oracle AI Database Administrator’s Guide,了解有关分布式系统中的事务恢复的更多信息

后台进程 (BG nn )

后台进程 (BG nn ) 是 Oracle RAC 环境中的标准后台进程,用于执行各种维护和监视任务。

后台进程负责缓冲区高速缓存管理、日志写进程 (LGWR) 进程支持、检查点协调、后台进程监视和统计信息收集。

虚拟操作系统守护进程 (Virtual Operating System Daemon Process,VOSD)

虚拟操作系统守护进程 (virtual operating system daemon process,VOSD) 可执行有时限的 Oracle 数据库服务操作。

此过程在实例启动时产生,并负责执行对数据库至关重要的系统服务操作。此过程由数据库实例、Oracle ASM 实例和 Oracle RAC 使用。

网络监视器进程 (NMON)

网络监视进程 (network monitor process,NMON) 是轻量级网络监视服务。

网络监视器 (Network Monitor,NMON) 是一项开销较低的网络监视服务,它利用高级内核功能来提供始终可用的全面监视。它在多个级别持续捕获网络统计信息和事件,包括系统范围、每接口、每 IP 和每流,为更高级别的服务提供详细的度量。健康分数服务基于 NMON 构建,以标准化的 0-100 分数简化网络健康评估,并根据需要收集诊断信息来主动解决问题。NMON 提供高效且切实可行的网络统计信息,可及时检测异常并与数据库活动建立有效关联。

可选后台进程

可选后台流程是指未定义为必备的任何后台流程。

大多数可选后台进程特定于任务或功能。例如,支持 Oracle ASM 的后台进程仅在启用此功能时可用。

本节介绍一些常见的可选进程:

另请参见:

归档程序进程 (ARC n )

发生重做日志切换后,归档程序进程 (ARCn) 会将联机重做日志文件复制到脱机存储。

这些进程还可以收集事务处理重做数据并将其传输到备用数据库目标。仅当数据库处于 ARCHIVELOG 模式并且启用了自动归档时,才存在 ARC n 进程。

另请参见:

作业队列进程 (CJQ0 和 Jnnn)

排队流程通常以批处理模式运行用户作业。作业是一种用户定义的任务,经过调度可以运行一次或多次。

例如,您可以使用作业队列在后台调度长时间运行的更新。给定开始日期和时间间隔,作业队列进程将尝试在下次出现时间间隔时运行作业。

Oracle AI Database 动态管理作业队列进程,从而使作业队列客户机能够在需要时使用更多作业队列进程。当新进程处于空闲状态时,数据库将释放它们使用的资源。

动态作业队列进程可以在给定时间间隔内同时运行许多作业。事件的顺序如下:

  1. 作业协调程序进程 (CJQ0) 将由 Oracle Scheduler 根据需要自动启动和停止。协调程序进程定期从系统 JOB$ 表中选择需要运行的作业。所选的新作业按时间排序。

  2. 协调程序进程动态生成作业队列子进程 (Jnnn) 以运行作业。

  3. 作业队列进程运行 CJQ0 进程为执行选择的作业之一。每个作业队列进程一次运行一个作业以完成。

  4. 进程完成单个作业的执行后,将轮询更多作业。如果未调度作业执行,则它将进入休眠状态,从该状态中,它定期唤醒并轮询更多作业。如果进程未找到任何新作业,则会在预设间隔后终止。

初始化参数 JOB_QUEUE_PROCESSES 表示可以在实例上同时运行的最大作业队列进程数。但是,客户机不应假定所有作业队列进程都可用于作业执行。注:如果初始化参数 JOB_QUEUE_PROCESSES 设置为 0,则不会启动协调程序进程。

另请参见:

闪回数据归档进程 (FBDA)

闪回数据归档进程 (flashback data archive process,FBDA) 将跟踪表的历史行归档到闪回数据归档中。

当跟踪表上包含 DML 的事务处理提交时,此处理会将更改后的行的预映像存储到闪回数据归档中。还会在当前行上保留元数据。

FBDA 自动管理闪回数据归档,以实现空间、组织和保留。此外,该处理还会跟踪跟踪已跟踪事务处理的归档时间。

空间管理协调员进程 (SMCO)

空间管理协调程序进程 (SMCO) 由 SMON 启动,并协调各种空间管理相关任务的执行。

SMCO 进程协调各种空间管理相关任务的执行。

典型的任务包括主动空间分配和回收以及临时表空间维护。SMCO 动态生成子进程 (Wnnn) 以实施该任务。

另请参阅:Oracle AI Database Development Guide 以了解闪回数据归档和期间历史记录功能

次要流程

辅助进程是代表其他进程执行工作的后台进程。

本节介绍 Oracle AI Database 使用的一些辅助进程。

I/O 辅助进程

I/O 辅助进程 (Innn) 模拟不支持该进程的系统和设备的异步 I/O。

在异步 I/O 中,传输没有时间要求,从而使其他进程在传输完成之前启动。

例如,假定应用程序将 1000 个块写入不支持异步 I/O 的操作系统上的磁盘。每次写入都按顺序执行,并等待确认写入成功。使用异步磁盘,应用程序可以在等待操作系统响应时批量写入块并执行其他工作,以写入所有块。

为了模拟异步 I/O,一个进程将监督多个辅助进程。调用方进程将工作分配给每个辅助进程,这些进程等待每个写入完成,并在完成后向调用方报告。在真正的异步 I/O 中,操作系统等待 I/O 完成并报告回进程,而在模拟异步 I/O 中,辅助进程等待并报告回调用方。

数据库支持不同类型的 I/O 辅助进程,包括:

另请参见:

并行执行 (PX) 服务器进程

在并行执行中,多个进程同时工作以运行单个 SQL 语句。

通过在多个进程之间划分工作,Oracle AI Database 可以更快地运行语句。例如,四个进程处理一年中四个不同的季度,而不是由一个进程自行处理所有四个季度。

并行执行与串行执行形成对比,其中单个服务器进程对 SQL 语句的连续执行执行执行所有必要的处理。例如,要执行 SELECT * FROM employees 等全表扫描,一个服务器进程将执行所有工作,如图 18-5 中所示。

图 5:串行全表扫描

插图 cncpt016.gif 的说明

并行执行可缩短数据仓库等大型数据库上的数据密集型操作的响应时间。对称多进程 (SMP) 和群集系统从并行执行中获得最大的性能优势,因为语句处理可以在多个 CPU 之间拆分。并行执行还可以使某些类型的 OLTP 和混合系统受益。

在 Oracle RAC 系统中,特定服务的服务放置控制并行执行。具体而言,并行进程在配置服务的节点上运行。默认情况下,Oracle AI Database 仅在提供用于连接到数据库的服务的实例上运行并行进程。这不会影响其他并行操作,例如并行恢复或处理 GV$ 查询。

另请参见:

查询协调程序

在并行执行中,服务器进程充当查询协调程序(也称为并行执行协调程序)。

查询协调程序负责以下工作:

  1. 解析查询

  2. 分配和控制并行执行服务器进程

  3. 向用户发送输出

给定一个查询的查询计划,协调程序会将 SQL 查询中的每个运算符分解为多个并行片段,按查询中指定的顺序运行这些片段,然后将执行这些运算符的并行执行服务器产生的部分结果集成在一起。

分配给单个操作的并行执行服务器的数量是操作的并行度。同一 SQL 语句中的多个操作都具有相同的并行度。

生成者和使用者

并行执行服务器分为生产者和使用者。生产者负责处理他们的数据,然后将其分发给需要它的消费者。

数据库可以使用各种技术执行分发。两个常见的技术是广播和散列。在广播中,每个生产者将行发送给所有使用者。在散列中,数据库计算一组键上的散列函数,并让每个使用者负责散列值的子集。图 18-6 表示生产者与使用者之间在并行执行以下语句时的相互作用:

SELECT * FROM employees ORDER BY last_name;

执行计划对 employees 表实施完全扫描。扫描后跟检索到的行的排序。扫描操作中涉及的所有生成器进程都将行发送到执行排序的相应使用者进程。

图 6:生成器和使用者

插图 vldbg013.gif 的说明

区组

在并行执行中,表将动态划分成负载单位。每个单元称为 granule ,是访问数据时的最小工作单元。

基于块的区组是由单个并行执行服务器(也称为 PX 服务器)读取的表的数据块范围,该服务器使用 Pnnn 作为名称格式。为了在并行服务器进程之间获得工作的均匀分布,粒子的数量总是比请求的 DOP 高得多。图 18-7 显示了 employees 表的并行扫描。

图 7:并行全表扫描

插图 cncpt017.gif 的说明

数据库在执行时将区组映射到并行执行服务器。当并行执行服务器完成读取与区组相对应的行时,当区组保持时,它将从查询协调器获取另一个区组。此操作将继续,直到读取表为止。执行服务器将结果发送回协调程序,协调程序会将各个部分组合到所需的全表扫描中。

另请参见: