乐于分享
好东西不私藏

Oracle官方文档翻译《Database Concepts 26ai》第18章-进程架构

Oracle官方文档翻译《Database Concepts 26ai》第18章-进程架构

18 Process Architecture(18 进程架构)

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

  • • Introduction to Processes(进程简介)进程是操作系统中可以运行一系列步骤的机制。
  • • Overview of Client Processes(客户端进程概述)当用户运行诸如 ProC 程序或 SQLPlus 之类的应用程序时,操作系统会创建一个客户端进程(有时称为用户进程)来运行该用户应用程序。客户端应用程序链接了 Oracle AI Database 库,这些库提供了与数据库通信所需的 API。
  • • Overview of Server Processes(服务器进程概述)Oracle AI Database 创建服务器进程来处理连接到实例的客户端进程的请求。客户端进程始终通过单独的服务器进程与数据库通信。
  • • Overview of Background Processes(后台进程概述)后台进程是多进程 Oracle 数据库使用的附加进程。后台进程执行操作数据库所需并为多用户最大化性能的维护任务。

Introduction to Processes(进程简介)

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

进程的执行架构取决于操作系统。例如,在 Windows 上,一个 Oracle 后台进程是进程内的一个执行线程。在 Linux 和 UNIX 上,一个 Oracle 进程要么是一个操作系统进程,要么是操作系统进程内的一个线程。

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

  • • 应用程序或 Oracle AI Database 实用工具数据库用户运行一个数据库应用程序(例如预编译器程序)或诸如 SQL*Plus 之类的数据库工具,该应用程序向数据库发出 SQL 语句。
  • • Oracle 数据库代码每个用户都有 Oracle 数据库代码代表他们执行,以解释和处理应用程序的 SQL 语句。

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

  • • Types of Processes(进程类型)一个数据库实例包含多个进程或与多个进程交互。
  • • Multiprocess and Multithreaded Oracle AI Database Systems(多进程和多线程 Oracle AI Database 系统)多进程 Oracle AI Database(也称为多用户 Oracle AI Database)使用多个进程来运行 Oracle AI Database 代码的不同部分,并为用户使用额外的 Oracle 进程——要么为每个连接的用户提供一个进程,要么为多个用户共享一个或多个进程。

另请参见

  • • “Trace Files”(跟踪文件)
  • • Oracle AI Database Get Started with Oracle AI Database Development

Types of Processes(进程类型)

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

进程分为以下几种类型:

  • • 客户端进程(Client Process)运行应用程序或 Oracle 工具代码。
  • • Oracle 进程(Oracle Process)是运行 Oracle 数据库代码的执行单元。在多线程架构中,Oracle 进程可以是操作系统进程或操作系统进程内的线程。Oracle 进程包括以下子类型:
    • • 后台进程(Background Process)随数据库实例启动,并执行维护任务,例如执行实例恢复、清理进程、将重做缓冲区写入磁盘等等。
    • • 服务器进程(Server Process)基于客户端请求执行工作。例如,这些进程解析 SQL 查询,将其放入共享池,为每个查询创建并执行查询计划,并从数据库缓冲区高速缓存或磁盘读取缓冲区。

注意:服务器进程,以及在这些进程中分配的进程内存,在数据库实例中运行。当服务器进程终止时,实例继续运行。

  • • 子进程(Child Process)为后台或服务器进程执行附加任务。

进程结构因操作系统和 Oracle AI Database 选项的选择而异。例如,可以为连接的用户配置专用服务器或共享服务器连接。在共享服务器架构中,每个运行数据库代码的服务器进程可以服务多个客户端进程。

图 18-1 显示了使用专用服务器连接的系统全局区(SGA)和后台进程。对于每个用户连接,一个客户端进程运行应用程序。该客户端进程不同于运行数据库代码的专用服务器进程。每个客户端进程与其自己的服务器进程关联,该服务器进程有其自己的程序全局区(PGA)。

Figure 18-1 Oracle Processes and the SGA(图 18-1 Oracle 进程和 SGA)

另请参见

  • • “Dedicated Server Architecture”(专用服务器架构) 和 “Shared Server Architecture”(共享服务器架构)
  • • 您的 Oracle AI Database 操作系统特定文档,了解有关配置选择的更多详细信息
  • • Oracle AI Database Reference,了解 V$PROCESS 视图

Multiprocess and Multithreaded Oracle AI Database Systems(多进程和多线程 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 进程元数据(Example 18-1 Viewing Oracle Process Metadata)

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

COL SPID FORMAT a8COL STID FORMAT a8SELECT SPID, STID, PROGRAM FROM V$PROCESS ORDERBY 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)...

另请参见

  • • Oracle AI Database Performance Tuning Guide,了解如何使用 V$PROCESS 视图
  • • Oracle AI Database Reference,了解 THREADED_EXECUTION 初始化参数

Overview of Client Processes(客户端进程概述)

当用户运行诸如 ProC 程序或 SQLPlus 之类的应用程序时,操作系统会创建一个客户端进程(有时称为用户进程)来运行该用户应用程序。客户端应用程序链接了 Oracle AI Database 库,这些库提供了与数据库通信所需的 API。

  • • Client and Server Processes(客户端和服务器进程)客户端进程在与实例直接交互的 Oracle 进程方面有重要区别。
  • • Connections and Sessions(连接和会话)数据库连接是客户端进程和数据库实例之间的物理通信路径。
  • • Current Container(当前容器)数据库会话是数据库实例内存中的一个逻辑实体,表示当前用户登录到数据库的状态。
  • • Database Operations(数据库操作)在数据库监控的上下文中,数据库操作是由最终用户或应用程序代码定义的两个时间点之间的会话活动。

Client and Server Processes(客户端和服务器进程)

客户端进程在与实例直接交互的 Oracle 进程方面有重要区别。

服务客户端进程的 Oracle 进程可以读取和写入 SGA,而客户端进程不能。客户端进程可以在数据库主机之外的主机上运行,而 Oracle 进程不能。

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

SQL>CONNECT SYS@inst1AS SYSDBAEnter password: *********Connected to an idle instance.

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

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

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

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

另请参见“How an Instance Is Started”(实例如何启动),了解客户端如何在实例未启动时连接到数据库

Connections and Sessions(连接和会话)

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

在连接期间,使用可用的进程间通信机制或网络软件建立通信路径。通常,连接发生在客户端进程和服务器进程或调度进程之间,但也可能发生在客户端进程和 Oracle 连接管理器(CMAN)之间。

Current Container(当前容器)

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

例如,当用户通过密码由数据库进行身份验证时,会为该用户建立一个会话。会话从用户被数据库认证时开始,一直持续到用户断开连接或退出数据库应用程序。

会话和容器

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

每个会话在任何时间点都恰好有一个当前容器。因为每个容器中的数据字典是独立的,Oracle AI Database 使用当前容器中的数据字典进行名称解析和权限授权。

连接和会话之间的关系

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

注意:如果配置了 Oracle Net 连接池,则连接可能会断开但保留会话完好无损。

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

Figure 18-2 One Session for Each Connection(图 18-2 每个连接一个会话)

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

Figure 18-3 Two Sessions in One Connection(图 18-3 一个连接中的两个会话)

生成 SQL 语句执行统计信息的 autotrace 报告会重现图 18-3 中的场景。

示例 18-2 中的 DISCONNECT 命令实际上结束了会话,而不是连接。

示例 18-2:连接和会话(Example 18-2 Connections and Sessions)

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

SQL>SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME =USER;SID SERIAL# PADDR--- ------- --------90913BE2E41CSQL>SET AUTOTRACE ON STATISTICS;SQL>SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME =USER;SID SERIAL# PADDR--- ------- --------88933BE2E41C90913BE2E41C...SQL>DISCONNECT

DISCONNECT 命令实际上结束了会话,而不是连接。打开一个新终端并以其他用户身份连接到实例,以下查询显示地址为 3BE2E41C 的连接仍然活跃。

SQL>CONNECT dba1@inst1Password: ********Connected.SQL>SELECT PROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3BE2E41C');PROGRAM------------------------------------------------oracle@stbcs09-1 (TNS V1-V3)

另请参见“Shared Server Architecture”(共享服务器架构)

Database Operations(数据库操作)

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

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

为了监控、比较和调优任务,您可以将一大组任务划分为数据库操作,并将操作细分为阶段。一个用例是运行速度比正常情况慢的 PL/SQL 批处理作业。通过将该作业配置为数据库操作,您可以识别并调优作业中昂贵的步骤。

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

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

您可以使用 DBMS_SQL_MONITOR PL/SQL 包创建和管理数据库操作。您可以使用 VSQL_PLAN_MONITOR 和 V$SQL_MONITOR_SESSTAT 来监控操作。

另请参见

  • • Oracle AI Database SQL Tuning Guide,了解如何监控数据库操作
  • • Oracle AI Database Data Warehousing Guide,了解如何监控长时间运行的加载
  • • Oracle AI Database PL/SQL Packages and Types Reference,了解有关 DBMS_SQL_MONITOR 的更多信息
  • • Oracle AI Database Reference,了解有关 V$SQL_MONITOR 的更多信息

Overview of Server Processes(服务器进程概述)

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

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

  • • 解析并运行通过应用程序发出的 SQL 语句,包括创建和执行查询计划
  • • 执行 PL/SQL 代码
  • • 将数据块从数据文件读入数据库缓冲区高速缓存(DBW 后台进程负责将修改后的块写回磁盘)
  • • 以应用程序可以处理信息的方式返回结果
  • • Dedicated Server Processes(专用服务器进程)在专用服务器连接中,客户端连接与一个且仅与一个服务器进程关联。
  • • Shared Server Processes(共享服务器进程)在共享服务器连接中,客户端应用程序通过网络连接到调度进程,而不是服务器进程。例如,20 个客户端进程可以连接到一个调度进程。
  • • How Oracle AI Database Creates Server Processes(Oracle AI Database 如何创建服务器进程)数据库根据连接方法以各种方式创建服务器进程。

另请参见“Stages of SQL Processing”(SQL 处理的阶段)

Dedicated Server Processes(专用服务器进程)

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

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

另请参见

  • • “Dedicated Server Architecture”(专用服务器架构)
  • • “PGA Usage in Dedicated and Shared Server Modes”(专用和共享服务器模式下的 PGA 使用)

Shared Server Processes(共享服务器进程)

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

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

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

另请参见

  • • “Shared Server Architecture”(共享服务器架构)
  • • “Large Pool”(大型池)

How Oracle AI Database Creates Server Processes(Oracle AI Database 如何创建服务器进程)

数据库根据连接方法以各种方式创建服务器进程。

连接方法如下:

  • • Bequeath(本机连接)SQL*Plus、OCI 客户端或其他客户端应用程序直接派生服务器进程。
  • • Oracle Net 监听器(Oracle Net Listener)客户端应用程序通过监听器连接到数据库。
  • • 专用代理(Dedicated Broker)这是一个创建前台进程的数据库进程。与监听器不同,代理驻留在数据库实例内部。当使用专用代理时,客户端连接到监听器,然后监听器将连接移交给专用代理。

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

  1. 1. 客户端应用程序向监听器或代理请求新连接。
  2. 2. 监听器或代理启动新进程或线程的创建。
  3. 3. 操作系统创建新进程或线程。
  4. 4. Oracle AI Database 初始化各种组件和通知。
  5. 5. 数据库移交连接和特定于连接的代码。

可选地,如果您使用专用代理连接方法,则可以使用 DBMS_PROCESS 包预先创建服务器进程池。在这种情况下,进程管理器(PMAN)后台进程监控预先创建的进程池,这些进程等待与客户端请求关联。当连接需要服务器进程时,数据库会跳过进程创建的第 2-4 步,只执行第 5 步。此优化提高了性能。

注意

  • • Oracle AI Database PL/SQL Packages and Types Reference,了解 DBMS_PROCESS PL/SQL 包
  • • Oracle AI Database Reference,了解 PMAN 后台进程

Overview of Background Processes(后台进程概述)

后台进程是多进程 Oracle 数据库使用的附加进程。后台进程执行操作数据库所需并为多用户最大化性能的维护任务。

每个后台进程都有单独的任务,但与其他进程协同工作。例如,LGWR 进程将数据从重做日志缓冲区写入联机重做日志。当已满的重做日志文件准备好进行归档时,LGWR 会通知另一个进程来归档该重做日志文件。

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

SELECT PNAMEFROM   V$PROCESSWHERE  PNAME ISNOT NULLORDERBY PNAME;

本节包括以下主题:

  • • Mandatory Background Processes(必需后台进程)
  • • Optional Background Processes(可选后台进程)
  • • Secondary Processes(辅助进程)

Mandatory Background Processes(必需后台进程)

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

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

本节描述以下必需后台进程:

  • • Process Monitor Process (PMON) Group(进程监控进程(PMON)组)PMON 组包括 PMON、清理主进程(CLMN)和清理辅助进程(CLnn)。这些进程负责监控和清理其他进程。
  • • Process Manager (PMAN)(进程管理器(PMAN))进程管理器(PMAN)监督多个后台进程,包括共享服务器、池化服务器和作业队列进程。
  • • Listener Registration Process (LREG)(监听器注册进程(LREG))监听器注册进程(LREG)向 Oracle Net Listener 注册数据库实例和调度进程的信息。
  • • System Monitor Process (SMON)(系统监控进程(SMON))系统监控进程(SMON)负责各种系统级清理职责。
  • • Database Writer Process (DBW)(数据库写入进程(DBW))数据库写入进程(DBW)将数据库缓冲区的内容写入数据文件。DBW 进程将数据库缓冲区高速缓存中已修改的缓冲区写入磁盘。
  • • Log Writer Process (LGWR)(日志写入进程(LGWR))日志写入进程(LGWR)管理联机重做日志缓冲区。
  • • Checkpoint Process (CKPT)(检查点进程(CKPT))检查点进程(CKPT)使用检查点信息更新控制文件和数据文件头,并通知 DBW 将块写入磁盘。检查点信息包括检查点位置、SCN 以及联机重做日志中开始恢复的位置。
  • • Manageability Monitor Processes (MMON and MMNL)(可管理性监控进程(MMON 和 MMNL))可管理性监控进程(MMON)执行与自动工作负载存储库(AWR)相关的许多任务。
  • • Recoverer Process (RECO)(恢复器进程(RECO))在分布式数据库中,恢复器进程(RECO)自动解决分布式事务中的故障。
  • • Background Process (BGnn)(后台进程(BGnn))后台进程(BGnn)是 Oracle RAC 环境中的标准后台进程,执行各种维护和监控任务。
  • • Virtual Operating System Daemon Process (VOSD)(虚拟操作系统守护进程(VOSD))虚拟操作系统守护进程(VOSD)执行有时间限制的 Oracle 数据库服务操作。
  • • Network Monitor Process (NMON)(网络监控进程(NMON))网络监控进程(NMON)是一个轻量级的网络监控服务。

另请参见

  • • “Read/Write and Read-Only Instances”(读写和只读实例)
  • • Oracle AI Database Reference,了解其他必需进程的描述,包括 MMAN、DIAG、VKTM、DBRM 和 PSP0
  • • Oracle Real Application Clusters Administration and Deployment Guide 和 Oracle Clusterware Administration and Deployment Guide,了解有关 Oracle RAC 和 Oracle Clusterware 特定后台进程的更多信息

Process Monitor Process (PMON) Group(进程监控进程(PMON)组)

PMON 组包括 PMON、清理主进程(CLMN)和清理辅助进程(CLnn)。这些进程负责监控和清理其他进程。

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

数据库必须确保由已终止进程持有的资源被释放,以便它们可供其他进程使用。否则,进程可能最终被阻塞或陷入争用。

  • • Process Monitor Process (PMON)(进程监控进程(PMON))进程监控(PMON)检测其他后台进程的终止。如果服务器或调度进程异常终止,则 PMON 组负责执行进程恢复。进程终止可能有多种原因,包括操作系统 kill 命令或 ALTER SYSTEM KILL SESSION 语句。
  • • Cleanup Main Process (CLMN)(清理主进程(CLMN))PMON 将清理工作委托给清理主进程(CLMN)。检测异常终止的任务仍由 PMON 负责。
  • • Cleanup Helper Processes (CLnn)(清理辅助进程(CLnn))CLMN 将清理工作委托给 CLnn 辅助进程。
  • • Database Resource Quarantine(数据库资源隔离)如果进程或会话终止,则 PMON 组将持有的资源释放回数据库。在某些情况下,PMON 组可以自动隔离损坏的、不可恢复的资源,以使数据库实例不会立即被迫终止。

Process Monitor Process (PMON)(进程监控进程(PMON))

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

Cleanup Main Process (CLMN)(清理主进程(CLMN))

PMON 将清理工作委托给清理主进程(CLMN)。检测异常终止的任务仍由 PMON 负责。

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

Cleanup Helper Processes (CLnn)(清理辅助进程(CLnn))

CLMN 将清理工作委托给 CLnn 辅助进程。

CLnn 进程协助清理已终止的进程和会话。辅助进程的数量与要执行的清理工作量以及当前的清理效率成正比。

清理进程可能会被阻塞,这会阻止它继续清理其他进程。此外,如果多个进程需要清理,则清理时间可能很长。由于这些原因,Oracle AI Database 可以并行使用多个辅助进程来执行清理,从而缓解性能下降。

VDEAD_CLEANUP 视图包含有关 CLMN 清理的元数据。VCLEANUP_PROCESS.STATE 为 BUSY,则该进程当前正在进行清理。

另请参见Oracle AI Database Reference,了解有关 V$CLEANUP_PROCESS 的更多信息

Database Resource Quarantine(数据库资源隔离)

如果进程或会话终止,则 PMON 组将持有的资源释放回数据库。在某些情况下,PMON 组可以自动隔离损坏的、不可恢复的资源,以使数据库实例不会立即被迫终止。

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

另请参见Oracle AI Database Reference,了解有关 V$QUARANTINE 的更多信息

Process Manager (PMAN)(进程管理器(PMAN))

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

PMAN 监控、创建和停止以下类型的进程:

  • • 调度进程和共享服务器进程
  • • 用于数据库驻留连接池的连接代理和池化服务器进程
  • • 作业队列进程
  • • 可重新启动的后台进程

Listener Registration Process (LREG)(监听器注册进程(LREG))

监听器注册进程(LREG)向 Oracle Net Listener 注册数据库实例和调度进程的信息。

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

注意:在 Oracle Database 12c 之前的版本中,PMON 执行监听器注册。

另请参见“The Oracle Net Listener”(Oracle Net 监听器)

System Monitor Process (SMON)(系统监控进程(SMON))

系统监控进程(SMON)负责各种系统级清理职责。

分配给 SMON 的职责包括:

  • • 在实例启动时执行实例恢复(如果需要)。在 Oracle RAC 数据库中,一个数据库实例的 SMON 进程可以为失败的实例执行实例恢复。
  • • 恢复在实例恢复期间因文件读取或表空间脱机错误而跳过的已终止事务。当表空间或文件重新联机时,SMON 恢复这些事务。
  • • 清理永久表空间中未使用的临时段。例如,Oracle AI Database 在创建索引时分配区。如果操作失败,则 SMON 清理临时空间。
  • • 合并字典管理表空间内的连续空闲区。

SMON 定期检查是否需要它。其他进程如果检测到需要 SMON,可以调用它。

Database Writer Process (DBW)(数据库写入进程(DBW))

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

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

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

  • • 当服务器进程在扫描了阈值数量的缓冲区后找不到干净的可重用缓冲区时,它会通知 DBW 写入。DBW 在执行其他处理的同时,尽可能异步地将脏缓冲区写入磁盘。
  • • DBW 定期写入缓冲区以推进检查点,检查点是重做线程中实例恢复开始的位置。检查点的日志位置由缓冲区高速缓存中最旧的脏缓冲区决定。

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

另请参见

  • • “Database Buffer Cache”(数据库缓冲区高速缓存)
  • • “Overview of Checkpoints”(检查点概述)
  • • Oracle AI Database Performance Tuning Guide,获取有关配置、监控和调优 DBW 的建议。

Log Writer Process (LGWR)(日志写入进程(LGWR))

日志写入进程(LGWR)管理联机重做日志缓冲区。

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

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

  • • 用户提交事务。
  • • 发生联机重做日志切换。
  • • 自 LGWR 上次写入以来已经过了三秒。
  • • 重做日志缓冲区已满三分之一或包含 1 MB 的缓冲数据。
  • • DBW 必须将修改后的缓冲区写入磁盘。

在 DBW 可以写入脏缓冲区之前,数据库必须将与缓冲区更改相关的重做记录写入磁盘(写前协议)。如果 DBW 发现某些重做记录尚未写入,它会通知 LGWR 将记录写入磁盘,并等待 LGWR 完成后再将数据缓冲区写入磁盘。

  • • LGWR and Commits(LGWR 和提交)Oracle AI Database 使用快速提交机制来提高已提交事务的性能。
  • • LGWR and Inaccessible Files(LGWR 和不可访问的文件)LGWR 同步写入联机重做日志文件的活动镜像组。

另请参见“Commits of Transactions”(事务的提交)

LGWR and Commits(LGWR 和提交)

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

当用户发出 COMMIT 语句时,事务被分配一个系统更改号(SCN)。LGWR 将提交记录放入重做日志缓冲区,并立即将其与提交 SCN 和事务的重做条目一同写入磁盘。

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

包含事务提交记录的重做条目的原子写入是确定事务已提交的单一事件。Oracle AI Database 向提交的事务返回成功代码,尽管数据缓冲区尚未写入磁盘。对数据块的相应更改会延迟到 DBW 将它们高效地写入数据文件时。

注意:LGWR 可以在事务提交前将重做日志条目写入磁盘。只有当事务随后提交时,受重做条目保护的更改才会变为永久性。

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

LGWR and Inaccessible Files(LGWR 和不可访问的文件)

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

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

另请参见

  • • “How Oracle AI Database Writes to the Online Redo Log”(Oracle AI Database 如何写入联机重做日志)和 “Redo Log Buffer”(重做日志缓冲区)
  • • Oracle AI Database Performance Tuning Guide,了解如何监控和调优 LGWR 的性能

Checkpoint Process (CKPT)(检查点进程(CKPT))

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

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

Figure 18-4 Checkpoint Process(图 18-4 检查点进程)

另请参见“Overview of Checkpoints”(检查点概述)

Manageability Monitor Processes (MMON and MMNL)(可管理性监控进程(MMON 和 MMNL))

可管理性监控进程(MMON)执行与自动工作负载存储库(AWR)相关的许多任务。

例如,MMON 在指标违反其阈值时写入、拍摄快照以及为最近修改的 SQL 对象捕获统计信息值。

可管理性监控精简进程(MMNL)将统计信息从 SGA 中的活动会话历史记录(ASH)缓冲区写入磁盘。当 ASH 缓冲区已满时,MMNL 写入磁盘。

另请参见“Oracle AI Database Get Started with Performance Tuning” 和 “Overview of Active Session History”(活动会话历史记录概述)

Recoverer Process (RECO)(恢复器进程(RECO))

在分布式数据库中,恢复器进程(RECO)自动解决分布式事务中的故障。

节点的 RECO 进程自动连接到涉及有疑问的分布式事务的其他数据库。当 RECO 在数据库之间重新建立连接时,它会自动解决所有有疑问的事务,从每个数据库的挂起事务表中移除与已解决事务相对应的任何行。

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

Background Process (BGnn)(后台进程(BGnn))

后台进程(BGnn)是 Oracle RAC 环境中的标准后台进程,执行各种维护和监控任务。

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

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

虚拟操作系统守护进程(VOSD)执行有时间限制的 Oracle 数据库服务操作。

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

Network Monitor Process (NMON)(网络监控进程(NMON))

网络监控进程(NMON)是一个轻量级的网络监控服务。

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

Optional Background Processes(可选后台进程)

可选后台进程是任何未被定义为必需的后台进程。

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

本节描述一些常见的可选进程:

  • • Archiver Processes (ARCn)(归档进程(ARCn))归档进程(ARCn)在重做日志切换发生后将联机重做日志文件复制到脱机存储。
  • • Job Queue Processes (CJQ0 and Jnnn)(作业队列进程(CJQ0 和 Jnnn))队列进程运行用户作业,通常以批处理模式。作业是用户定义的、计划运行一次或多次的任务。
  • • Flashback Data Archive Process (FBDA)(闪回数据归档进程(FBDA))闪回数据归档进程(FBDA)将已跟踪表的历史行归档到闪回数据归档中。
  • • Space Management Coordinator Process (SMCO)(空间管理协调进程(SMCO))空间管理协调进程(SMCO)进程由 SMON 启动,并协调各种空间管理相关任务的执行。

另请参见

  • • Oracle AI Database Transactional Event Queues and Advanced Queuing User’s Guide,了解高级队列(AQ)的介绍
  • • Oracle AI Database Reference,了解特定于 AQ 和 Oracle ASM 的后台进程的描述

Archiver Processes (ARCn)(归档进程(ARCn))

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

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

另请参见

  • • “Archived Redo Log Files”(归档重做日志文件)
  • • Oracle AI Database Administrator’s Guide,了解如何调整归档进程的数量
  • • Oracle AI Database Performance Tuning Guide,了解如何调优归档器性能

Job Queue Processes (CJQ0 and Jnnn)(作业队列进程(CJQ0 和 Jnnn))

队列进程运行用户作业,通常以批处理模式。作业是用户定义的、计划运行一次或多次的任务。

例如,您可以使用作业队列在后台安排长时间运行的更新。给定一个开始日期和一个时间间隔,作业队列进程尝试在间隔的下一个时间点运行作业。

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

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

  1. 1. Oracle 调度器根据需要自动启动和停止作业协调进程(CJQ0)。协调进程定期从系统 JOB$ 表中选择需要运行的作业。新选择的作业按时间排序。
  2. 2. 协调进程动态生成作业队列子进程(Jnnn)来运行这些作业。
  3. 3. 作业队列进程运行由 CJQ0 进程选择执行的作业之一。每个作业队列进程一次运行一个作业直到完成。
  4. 4. 进程完成单个作业的执行后,它会轮询更多作业。如果没有计划执行的作业,则它进入睡眠状态,从该状态它会定期唤醒并轮询更多作业。如果进程未找到任何新作业,则它会在预设间隔后终止。

初始化参数 JOB_QUEUE_PROCESSES 表示可以在实例上并发运行的最大作业队列进程数。但是,客户端不应假定所有作业队列进程都可用于作业执行。

注意:如果初始化参数 JOB_QUEUE_PROCESSES 设置为 0,则不会启动协调进程。

另请参见

  • • Oracle AI Database Administrator’s Guide,了解 Oracle Scheduler
  • • Oracle AI Database Transactional Event Queues and Advanced Queuing User’s Guide,了解 AQ 后台进程

Flashback Data Archive Process (FBDA)(闪回数据归档进程(FBDA))

闪回数据归档进程(FBDA)将已跟踪表的历史行归档到闪回数据归档中。

当包含对已跟踪表的 DML 的事务提交时,此进程将更改行的前映像存储到闪回数据归档中。它还保留当前行的元数据。

FBDA 自动管理闪回数据归档的空间、组织和保留期。此外,该进程跟踪已跟踪事务的归档已经进行了多长时间。

Space Management Coordinator Process (SMCO)(空间管理协调进程(SMCO))

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

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

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

另请参见Oracle AI Database Development Guide,了解闪回数据归档和时态历史功能

Secondary Processes(辅助进程)

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

本节描述 Oracle AI Database 使用的一些辅助进程。

  • • I/O Secondary Processes(I/O 辅助进程)I/O 辅助进程(Innn)为不支持异步 I/O 的系统和设备模拟异步 I/O。
  • • Parallel Execution (PX) Server Processes(并行执行(PX)服务器进程)在并行执行中,多个进程同时协同工作以运行单个 SQL 语句。

另请参见Oracle AI Database Reference,了解 Oracle AI Database 辅助进程的描述。

I/O Secondary Processes(I/O 辅助进程)

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

在异步 I/O 中,没有传输的时间要求,使得其他进程可以在传输完成之前开始。

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

为了模拟异步 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。

另请参见

  • • Oracle AI Database Backup and Recovery User’s Guide,了解有关备份和还原操作的 I/O 辅助进程的更多信息
  • • Oracle AI Database Performance Tuning Guide,了解有关数据库写入辅助进程的更多信息

Parallel Execution (PX) Server Processes(并行执行(PX)服务器进程)

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

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

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

Figure 18-5 Serial Full Table Scan(图 18-5 串行全表扫描)

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

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

  • • Query Coordinator(查询协调器)在并行执行中,服务器进程充当查询协调器(也称为并行执行协调器)。
  • • Producers and Consumers(生产者和消费者)并行执行服务器分为生产者和消费者。生产者负责处理其数据,然后将其分发给需要的消费者。
  • • Granules(粒度单元)在并行执行中,表被动态划分为加载单元。每个单元称为一个粒度单元,是访问数据时的最小工作单元。

另请参见

  • • Oracle AI Database VLDB and Partitioning Guide,了解有关并行执行的更多信息
  • • Oracle Real Application Clusters Administration and Deployment Guide,了解 Oracle RAC 环境中有关并行执行的注意事项

Query Coordinator(查询协调器)

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

查询协调器负责以下工作:

  1. 1. 解析查询
  2. 2. 分配和控制并行执行服务器进程
  3. 3. 将输出发送给用户

给定一个查询的查询计划,协调器将 SQL 查询中的每个操作分解为并行部分,按照查询中指定的顺序运行它们,并整合由执行这些操作的并行执行服务器产生的部分结果。

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

Producers and Consumers(生产者和消费者)

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

数据库可以使用多种技术来执行分发。两种常见的技术是广播和哈希。在广播中,每个生产者将行发送给所有消费者。在哈希中,数据库对一组键计算哈希函数,并使每个消费者负责哈希值的一个子集。

图 18-6 表示在以下语句的并行执行中生产者和消费者之间的相互作用:

SELECT*FROM employees ORDERBY last_name;

执行计划实现了对 employees 表的全扫描。该扫描之后是对检索到的行进行排序。参与扫描操作的所有生产者进程都将行发送给执行排序操作的相应消费者进程。

Figure 18-6 Producers and Consumers(图 18-6 生产者和消费者)

Granules(粒度单元)

在并行执行中,表被动态划分为加载单元。每个单元称为一个粒度单元,是访问数据时的最小工作单元。

基于块的粒度单元是由单个并行执行服务器(也称为 PX 服务器,使用 Pnnn 作为名称格式)读取的表的一系列数据块。为了在并行服务器进程之间获得均匀的工作分布,粒度单元的数量总是远高于请求的 DOP。

图 18-7 显示了 employees 表的并行扫描。

Figure 18-7 Parallel Full Table Scan(图 18-7 并行全表扫描)

数据库在执行时将粒度单元映射到并行执行服务器。当并行执行服务器完成与一个粒度单元对应的行的读取时,如果仍有粒度单元剩余,它会从查询协调器获取另一个粒度单元。此操作持续进行,直到表被读取完毕。执行服务器将结果发送回协调器,协调器将这些片段组装成所需的完整全表扫描。

另请参见

  • • Oracle AI Database VLDB and Partitioning Guide,了解如何使用并行执行
  • • Oracle AI Database Data Warehousing Guide,了解推荐的并行性初始化参数