Process Architecture

Process Architecture

Introduction to Processes

进程是在操作系统中可以运行一系列步骤的机制。该机制取决于操作系统。例如,在Linux上的一个Oracle 后台进程是一个Linux 进程。而在 Windows 上的一个 Oracle 后台进程是在某个进程内执行的一个线程。

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

应用程序或 Oracle 数据库实用程序

数据库用户运行一个数据库应用程序,如预编译器程序或数据库工具(如SQL*Plus),来向数据库发出 SQL 语句。

Oracle数据库代码

每个用户都具有为其运行的 Oracle 数据库代码,以解释和处理应用程序的 SQL 语句。

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

Multiple-Process Oracle Database Systems

多进程 Oracle (也称为多用户 Oracle) 使用几个进程来运行 Oracle 数据库代码的不同部分,并为用户运行一些其他进程——要么每个连接的用户一个进程,或由多个用户共享一个或多个进程。大多数数据库都是多用户的,因为数据库的主要优势是管理同时由多个用户所需的数据。

数据库实例中的每个进程执行某个特定的作业。通过将数据库和应用程序的工作划分成几个进程,多个用户和应用程序可以同时连接到实例,而系统仍可提供较好的性能。

Types of Processes

数据库实例包含如下类型的进程,或与以下类型的进程进行交互:

客户端进程,运行应用程序或 Oracle 工具代码。

Oracle 进程,运行 Oracle 数据库代码。Oracle 进程包括下列子类型:

后台进程,与数据库实例同时启动,并执行一些维护任务,如执行实例恢复、清理进程、将重做缓冲区写入磁盘等。

服务器进程,基于客户端请求,执行相应的工作。例如,这些进程解析 SQL 查询、将查询放入共享池、为查询创建并执行查询计划、和将数据从数据库缓冲区高速缓存(或从磁盘)读入缓冲区。

从属进程,为后台进程或服务器进程执行额外任务。

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

Overview of Client Processes

当用户运行一个应用程序(如Pro*C 程序或 SQL*Plus)时,操作系统会创建一个客户端进程 (有时称为用户进程)来运行用户应用程序。客户端应用程序具有已链接到进程的Oracle 数据库库文件,以提供与数据库进行通信所需的API。

Client and Server Processes

客户端进程和与实例直接交互的 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)

Connections and Sessions

连接是在客户端进程和数据库实例之间的一条物理通信路径。通信路径使用可用的进程间通信机制或网络软件来建立。通常,连接在客户端进程和服务器进程(或调度器进程)之间产生,但它也可以在客户端进程与 Oracle 连接管理器 (CMAN)之间产生。

会话是数据库实例内存中的一个逻辑实体,表示登录到数据库的某个当前用户的状态。例如,当用户使用密码通过了数据库身份验证时,会为此用户建立一个会话。会话的持续时间从用户通过数据库验证开始,直到用户断开连接,或退出数据库应用程序。

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

如果配置了 Oracle 网络连接池,则可能出现连接已断掉、而会话却保持不变的情况。

单个数据库用户可能会同时运行多个会话。如图 15-2所示,hr用户可能具有到数据库的多个连接。对于专用服务器连接,数据库为每个连接创建一个服务器进程。只有导致创建该专用服务器进程的客户端进程才能使用它(该会话)。对于共享服务器连接,由多个客户端进程访问单个共享服务器进程。

每个连接一个会话

单个连接中的两个会话

生成一个SQL 语句执行统计信息的自动跟踪报告,将再现单个连接中的两个会话中的场景。每个连接一个会话使用SYSTEM用户从SQL*Plus连接到数据库,并启用跟踪,从而创建一个新的会话 (包括示例输出)。

示例1有两个会话的单个连接.

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命令实际上只是结束了会话,而未中断连接。打开一个新的终端并以一个不同的用户连接到实例,示例2中的查询显示,示例15-1中的连接仍处于活动状态。

SQL> CONNECT dba1@inst1

Password: ********

Connected.

SQL> SELECT PROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3BE2E41C');

PROGRAM

------------------------------------------------

oracle@stbcs09-1 (TNS V1-V3)

Overview of Server Processes

Oracle 数据库创建服务器进程,以处理连接到实例的客户端进程的请求。客户端进程总是通过单独的服务器进程与数据库进行通信。

为某个数据库应用程序创建的服务器进程,可以执行一个或多个下列任务:

解析并运行通过应用程序发出的SQL 语句,包括创建和执行查询计划

执行 PL/SQL 代码

将数据块从数据文件读入数据库缓冲区高速缓存 (将已修改的块写回磁盘是DBWn 后台进程的任务)

返回结果信息,以便应用程序可以进一步处理

Dedicated Server Processes

对于专用服务器连接,客户端连接与一个且仅与一个服务器进程相关联。在 Linux上,连接到一个数据库实例的 20 个客户端进程,有相应的20个服务器进程为其提供服务。

每个客户端进程直接与其服务器进程进行通信。在会话期间,此服务器进程专用于其客户端进程。服务器进程将特定于进程的信息和UGA 存储在其 PGA中

Shared Server Processes

对于共享服务器连接,客户端应用程序通过网络连接到一个调度器进程,而不是一个服务器进程。例如 ,20个客户端进程可能会仅连接到一个单一的调度器进程。

调度器进程接收来自已连接客户端的请求,并将它们放入大池中的请求队列。第一个可用的共享服务器进程从队列承接一个请求并处理之。之后,共享服务器进程将结果放回调度器响应队列。调度器进程会监视此队列,并将结果传回客户端。

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

Overview of Background Processes

多进程Oracle 数据库会使用某些称为后台进程的额外进程。后台进程执行操作数据库所需的维护任务,并最大化多用户性能。每个后台进程都有其单独的任务,但又与其他进程相互协作。

数据库实例启动时,Oracle 数据库将自动创建后台进程。实例可能会有许多后台进程,但并不是所有这些进程在每种数据库配置中都存在。以下查询列出了在您的数据库上运行的后台进程:

SELECT PNAME

FROM V$PROCESS

WHERE PNAME IS NOT NULL

ORDER BY PNAME;

Mandatory Background Processes

强制性后台进程存在于所有典型的数据库配置。默认情况下,这些进程运行在以一个最小化配置的初始化参数文件启动的数据库实例中

主要有以下进程:

进程监视器进程 (PMON)

? 系统监视器进程(SMON)

? 数据库写入器进程(DBWn)

? 日志写入器进程(LGWR)

? 检查点进程(CKPT)

? 可管理性监视器进程(MMON and MMNL)

? 恢复器进程(RECO)

Process Monitor Process (PMON)

监视器 (PMON) 监视其他的后台进程,并在某个服务器进程或调度器进程异常终止时执行进程恢复。PMON 负责清理数据库缓冲区高速缓存,并释放客户端进程以前还在使用的资源PMON 还将实例和调度器进程的信息注册到Oracle 网络监听器。当实例启动时, PMON 轮询监听器以确定它是否正在运行。如果监听器正在运行,则PMON将有关参数传递给它。如果监听器未运行,则 PMON 定期尝试联系它。

System Monitor Process (SMON)

系统监视器进程 (SMON) 负责各种系统级清理职责。分配给 SMON 的职责包括:

如有必要,在实例启动时执行实例恢复。在 Oracle RAC 数据库中,一个数据库实例的 SMON 进程可以为另一个失败的实例执行实例恢复。

在实例恢复期间,由于读文件或表空间脱机错误而跳过的已终止事务,由SMON进行恢复。当表空间或文件重新联机时,SMON 将恢复该事务。

清理未使用的临时段。例如, Oracle 数据库在创建索引时会分配扩展区。如果操作失败,则SMON 会清理临时空间。

合并在字典管理的表空间中的多个连续空闲扩展区。

Database Writer Process (DBWn)

数据库写入器进程 (DBWn) 将数据库缓冲区的内容写入到数据文件中。DBWn 进程将数据库缓存中被修改的缓冲区写入到磁盘中。

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

DBWn 进程在下列条件下会将脏缓冲区写入到磁盘:

当服务器进程扫描了额定数目的缓冲区后,仍未找到干净的可重复使用的缓冲区时,它会通知DBWn 执行写入操作。DBWn 尽可能以异步方式将脏缓冲区写入到磁盘,以便同时能执行其他处理。

DBWn 周期性地写出缓冲区,以推进检查点,该点是重做线程中实例恢复开始的位置。检查点的日志位置由在缓冲区高速缓存中最老的脏缓冲区确定。

在许多情况下,DBWn写入的块将遍布整个磁盘。因此,该写操作往往要比由 LGWR 执行的顺序写入速度慢。DBWn 进程尽可能进行多块写入,以提高效率。多块写入的数据块数量因操作系统而异。

Log Writer Process (LGWR)

日志写入器进程 (LGWR) 管理重做日志缓冲区。LGWR 将缓冲区中的一个连续部分写入联机重做日志。通过分离各种修改数据库缓冲区任务,将脏缓冲区分散写入到磁盘,而将重做缓冲区顺序写入到磁盘,提高了数据库性能。

在以下的情况下, LGWR将自上次最后写入以来,复制到缓冲区的所有重做条目写入联机重做日志:

用户提交了事务

发生了在线重做日志切换。

自LGWR 最后一次写入到现在超过了三秒。

重做日志缓冲区已达到三分之一满,或包含 1 MB以上被缓冲的数据。

DBWn 必须将修改的缓冲区写入到磁盘。

在 DBWn 可以将脏缓冲区写到磁盘之前,与该缓冲区更改相关联的重做记录必须先被写入磁盘 (预写协议)。如果DBWn 发现一些重做记录尚未写入,则它通知LGWR 将记录写入磁盘,并等待 LGWR完成此工作,然后DBWn才将数据缓冲区写入磁盘。

LGWR and Commits

Oracle 数据库使用快速提交机制来提高已提交事务的性能。当用户发出 COMMIT 语句时,事务分配到一个系统更改号 (SCN)。LGWR 将一个提交记录记入重做日志缓冲区,连同提交SCN和事务的重做条目,并立即写入到磁盘。

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

包含事务提交记录的重做条目的原子写入,是确定该事务已提交的唯一事件。Oracle 数据库向已提交事务返回一个成功代码,虽然数据缓冲区尚未写入到磁盘。对数据块的相应更改被延迟,直到DBWn 在某个有利的时机将它们写到数据文件。

LGWR 可能会在提交事务之前,将重做日志条目写入到磁盘。只有之后提交了事务,这些重做条目才会成为永久性的。

当事务活动很高时, LGWR 可能会使用组提交。例如,某个用户提交其事务,导致LGWR将事务的重做条目写入到磁盘。在此写操作的过程中,其他用户也试图提交。但LGWR 无法写入磁盘以提交这些事务,直到前面的写入完成为止。完成后, LGWR 可以将(尚未提交的)等待事务中的重做条目列表在一个操作中全部写入。通过这种方式,数据库最小化了磁盘 I/O,而最大化了性能。如果提交请求继续维持在一个高的水平,则每个LGWR写入操作都可能包含多个提交记录。

LGWR and Inaccessible Files

LGWR 同步写入联机重做日志文件组的所有活动镜像。如果某个日志文件不可访问,则 LGWR继续写入组中的其他文件,并在 LGWR 跟踪文件和警报日志中记录一个错误。如果组中的所有文件都损坏,或者如果因为尚未存档而不可用,则LGWR 不能继续工作。

Checkpoint Process (CKPT)

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

Manageability Monitor Processes (MMON and MMNL)

可管理性监视器进程 (MMON) 执行许多与自动工作负载存储库 (AWR) 相关的任务。例如, 当某个度量超出其阈值时,MMON 会写入信息,并拍摄快照,捕获最近修改的 SQL 对象的统计信息。

可管理性监视器轻量进程 (MMNL) 将SGA中的活动会话历史 (ASH) 缓冲区统计信息写入磁盘。当ASH缓冲区已满时,MMNL 将其写入到磁盘。

Recoverer Process (RECO)

在一个分布式数据库中,恢复器进程 (RECO) 会自动解决在分布式事务中的故障。一个节点的RECO进程会自动连接到可疑分布式事务中涉及的其他数据库。当RECO数据库之间重新建立了连接后,它会自动解决所有可疑事务,从每个数据库事务表中删除任何与可疑事务对应的未决事务行。

Optional Background Processes

可选后台进程即是未定义为强制性的后台进程。大多数可选后台进程是特定于任务或功能特性的。例如,支持 Oracle 流高级队列 (AQ) 或 Oracle 自动存储管理 (Oracle ASM) 的后台进程,只有在启用这些功能时才可用。

常见的可选流程:

Archiver Processes (ARCn)

? Job Queue Processes (CJQ0 and Jnnn)

? Flashback Data Archiver Process (FBDA)

? Space Management Coordinator Process (SMCO)

Archiver Processes (ARCn)

重做日志切换发生后,归档器进程(ARCn) 将联机重做日志文件复制到脱机存储。这些进程也可能会收集事务重做数据,并将其传送到备用数据库目标位置。仅当数据库处于归档模式下且启用了自动归档时,才存在ARCn 进程。

Job Queue Processes (CJQ0 and Jnnn)

Oracle 数据库使用作业队列进程来运行用户作业,通常使用批处理模式。作业是一种用户定义的被计划运行一次或多次的任务。例如,您可以使用作业队列来计划一个在后台长时间运行的更新任务。给定一个开始日期和时间间隔,作业队列进程尝试在下一个间隔重新运行该作业。

Oracle 数据库动态管理作业队列进程,以使作业队列客户端在需要时能使用更多作业队列进程。当这些新启动的进程处于空闲状态时,数据库会释放其资源。

Flashback Data Archiver Process (FBDA)

闪回数据归档器进程 (FBDA) 将跟踪表的历史行归档到闪回数据归档区。当跟踪表中包含 DML的事务提交时,该进程将行的前像存储到闪回数据存档区。它也会保存当前行上的元数据。FBDA 自动管理闪回数据存档的空间、 组织、和保留期等。此外,该进程会跟踪被跟踪的事务归档已发生了多久。

Space Management Coordinator Process (SMCO)

SMCO进程协调各种空间管理相关的任务,比如主动预防性的空间分配和空间回收。SMCO动态生成从属进程 (Wnnn) 来执行此任务。

Slave Processes

从属进程是为其他进程执行工作的后台进程。

I/O Slave Processes

I/O 从属进程 (Innn) 为不支持异步 I/O的系统和设备模拟异步 I/O。异步的 I/O没有传输时间要求,使其他进程可以在完成传输之前就可以开始。

例如,假定应用程序在一个不支持异步 I/O 的操作系统上写入1000个块到磁盘。每次写入都是顺序发生的,并等待一个写操作已成功的确认。而对于异步磁盘,应用程序可以大容量写入数据块,并在等待操作系统确认写入完的同时执行其他工作。

为模拟异步 I/O,由一个进程监督几个从属进程。调用者进程将工作分配给每个从属进程,从属进程会等待每个写操作完成,并在完成后报告调用者。在真正的异步 I/O中,操作系统会等待 I/O 完成,并在完成时报告主进程,而在模拟异步 I/O中,从属进程会等待,并在完成时报告调用者。

数据库支持包括以下不同类型的 I/O 从属进程:

恢复管理器 (RMAN)的I/O 从属进程

当使用RMAN备份或还原数据时,您可以为磁盘和磁带设备使用I/O 从属进程。

数据库写入器从属进程

如果计算机只有一个CPU,则数据库使用多个写入器进程并不现实,此时数据库可以通过多个从属进程来分布 I/O。DBWR 是扫描缓冲区高速缓存 LRU 列表中的块以写入到磁盘的唯一进程。而I/O 从属进程为这些块执行I/O。

Parallel Query Slaves

在并行执行或并行处理中,多个进程同时协作,来运行一个单一 SQL 语句。通过在多个进程之间分配工作,Oracle 数据库可以更快地运行语句。例如,四个进程分别处理一年中四个不同的季度,而不是由一个进程处理所有四个季度。

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

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

Serial Execution

在串行执行中,由单个服务器进程,执行顺序执行的某个 SQL 语句的所有必要处理。例如,执行一个全表扫描(如SELECT * FROM employees),由一个服务器进程执行所有的工作

Parallel Execution

在并行执行中,服务器进程作为并行执行协调器,负责解析查询、分配和控制从属进程、并将输出发送给用户。给定一个 SQL 查询的查询计划,协调器将SQL 查询中的每个运算符分解成一些平行的片断、 并按查询中指定的顺序运行它们,最后又将这些执行各个操作的从属进程所产生的部分结果集成起来。

数据库在执行时将颗粒映射到执行服务器。当一个执行服务器完成对某个颗粒对应行的读取,而此时还有其它颗粒要读取时,该执行服务器从协调器获取另一个颗粒。此操作将继续,直到读取完整个表。执行服务器向协调器发送执行结果,协调器再将这些片断合并成最终所需的全表扫描结果。

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25427762/viewspace-1062036/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25427762/viewspace-1062036/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值