暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 面试宝典-进程结构篇

IT小Chen 2021-04-14
1825

Oracle面试宝典-进程结构篇

Oracle数据库是以单进程还是多进程方式运行的?

Windows平台下,Oracle数据库是以单进程(oracle.exe)多线程方式运行。

Linux/Unix平台下,Oracle数据库通常是以多进程方式运行。

到了12c这个版本,OracleUnix/Linux平台上做出了一些改变,引入了多线程的模式。

这个特性由threaded_execution参数来控制,通过这个参数,可以控制数据库以多进程方式运行或者以多线程方式运行,该参数默认是false。数据库以多进程方式运行。

怎么理解进程和线程?

进程是表示资源分配的基本单位,又是调度运行的基本单位。线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

看到知乎上,一位名为南理汉子的作者回答特别新颖:

开个QQ,开了一个进程;开了迅雷,开了一个进程。在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。所以运行某个软件,相当于开了一个进程。在这个软件运行的过程里(在这个进程里),多个工作支撑的完成QQ的运行,那么这“多个工作”分别有一个线程。所以一个进程管着多个线程。通俗的讲:“进程是爹妈,管着众多的线程儿子”...

Oracle数据库中有哪几类进程?

1客户进程

2服务进程

3后台进

请分别介绍下客户进程、服务器进程、后台进

1客户进程

当用户运行一个应用程序(Pro*C程序或SQL*Plus)时,操作系统创建一个客户端进程(有时称为用户进程)来运行用户应用程序。客户端应用程序将Oracle数据库相连,以提供与数据库通信所需的api

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

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

例如,假设客户端主机上的用户启动了SQL*Plus,然后在数据库实例没有启动时通过网络连接到另一台主机上的数据库sample:

SQL> CONNECT SYS@cjc AS SYSDBA

Enter password: *********

Connected to an idle instance.

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

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

2服务进程

Oracle服务进程用于处理连接到实例的客户进程的请求。

专用服务器进程(dedicated server),每个进程服务一个客户进程。

共享服务器进程(shared server),每个进程服务多个客户进程。

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

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

3后台进程

后台进程执行操作数据库所需的维护任务,并为多个用户实现性能最大化。

每个后台进程有一个单独的任务,但是可以与其他进程一起工作。例如,LGWR进程将重做数据从重做日志缓冲区写入在线重做日志。当一个已填满的重做日志文件准备归档时,LGWR向另一个进程归档进程发出信号,让它归档重做日志文件。

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

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

后台进程包括三类:

3.1强制后台进程

3.2可选的后台进程

3.3 Slave后台进

强制后台:

3.1.1 进程监控进程(PMON)

3.1.2 程管理器(PMAN)

3.1.3 监听器注册流程(LREG)

3.1.4 系统监控流程(SMON)

3.1.5 数据库写入过程(DBW)

3.1.6 日志写入过程(LGWR)

3.1.7 检查点过程(CKPT)

3.1.8 可管理性监控流程(MMONMMNL)

3.1.9 回收器(RECO)

 

3.1.1 进程监进程(PMON)

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

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

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

进程监视器进程(PMON)

进程监视器(PMON)检测其他后台进程的终止。如果服务器或调度程序进程非正常终止,则PMON组负责执行进程恢复。进程终止可能有多个原因,包括操作系统终止命令或更改系统终止会话语句。

作用:

1、在其他进程失败后执行清理工作:回滚事物、释放锁、释放其他资源。

212C版本之前,PMON负责数据库实例监听注册的相关任务

3、检查会话的空闲连接时间。

触发条件:定时被唤醒,其他进程也会主动唤醒它。

清理主进程(CLMN)

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

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

清理辅助进程(CLnn)

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

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

清理进程可能被阻塞,从而阻止它继续清理其他进程。此外,如果多个进程需要清理,那么清理时间可能很长。由于这些原因,Oracle数据库可以并行地使用多个辅助进程来执行清理,从而缓解了缓慢的性能。

V$CLEANUP_PROCESSV$DEAD_CLEANUP视图包含关于CLMN清理的元数据。V$CLEANUP_PROCESS视图包含每个清理进程的一行。例如,如果V$CLEANUP_PROCESS。状态繁忙,则进程当前正在进行清理。

数据库资源隔离

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

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

3.1.2进程管理器(PMAN)

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

PMAN监视、启动和停止以下类型的进程:

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

2用于数据库常驻连接池的连接代理和池服务器进程pooled server process

3工作队列的Job queue processes

4重启的后台进程

3.1.3 监听器注册(LREG)

12C开始引入LREG进程,负责数据库实例监听注册的相关任务。12c之前的版本,该部分工作由PMON进程负责。侦听器注册进程(LREG)Oracle Net侦听器注册关于数据库实例和调度程序进程的信息。当实例启动时,LREG轮询侦听器以确定它是否正在运行。如果监听器正在运行,那么LREG将传递相关参数。如果它没有运行,那么LREG会定期尝试与它联系。

3.1.4 系统监控(SMON)

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

分配给SMON的职责包括:

1执行实例恢复,前滚(Roll Forward)恢复到实例关闭的状态,使用最后一次检查点后的日志进程重做。在Oracle RAC数据库中,一个数据库实例的SMON进程可以对失败的实例执行实例恢复。

2恢复在实例恢复期间由于文数据文件或表空间离线错误而跳过的已终止事务。当表空间或文件恢复联机时,SMON将恢复事务。

3清理未使用的临时段,释放空间。例如,Oracle数据库在创建索引时分配区段。如果操作失败,那么SMON将清理临时空间。

4合并空间,在字典管理的表空间中合并连续的空闲区。

3.1.5 数据库写进程(DBW)

该进程负责将buffer cache的脏数据写入到磁盘。DBW进程根据LRU算法,将最近最少被使用的buffer写入磁盘

尽管一个数据库写入进程(DBW0)对于大多数系统来说已经足够了,但是如果系统大量修改数据可以配置其他进程dbw1DBW9, DBWaDBWz, BW36bw99提高写入性能。这些附加的DBW进程在单处理器系统上没有用处。

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

1当服务器进程在扫描缓冲区的阈值数目后找不到干净的可重用缓冲区时,它向DBW发出写的信号。DBW在执行其他处理时,尽可能异步地将脏缓冲区写入磁盘。

2数据库执行检查点操作时。DBW定期写缓冲区来推进检查点,检查点是重做线程中实例恢复开始的位置。检查点的日志位置由缓冲区缓存中最老的脏缓冲区决定。

3修改表空间或数据文件离线时。

4 每三秒唤醒一次查看脏块数量,决定是否执行写入操作。

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

3.1.6 日志写进程(LGWR)

负责将redo log buffer的数据写入到在线重做日志,其会记录所有的DMLDDL操作,用于实例、介质恢复。

触发条件:

1用户提交事务。

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

3 LGWR上次写已经过去三秒钟了。

4重做日志缓冲区已满三分之一,或包含1 MB的缓冲数据。

5 DBWR进程触发:DBWn视图将脏数据块写入磁盘先检测他的相关redo记录是否写入联机日志文件,如果没有就通知LGWR进程。在oracle中成为提前写机制(write ahead):redo记录先于数据记录被写入磁盘

3.1.7 检查点(CKPT)

负责更新控制文件和数据文件头的检查点信息,其中包括检查点位置,SCN号,online redo log开始恢复的位置。检查点在以下情况可能发起:

(1)在日志切换alter system switch logfile的时候。

(2)直接使用alter system checkpoint命令实现。

(3)数据库用immediateTransactionNormal或选项Shutdown数据库的时候。

(4)开始、结束备份表空间等(ALTER TABLESPACE BEGIN BACKUP)

(5)将表空间或者数据文件切换为只读或者离线。

(6)DBW进程写的时候,但是此时只将检查点信息写入控制文件,而不会写到数据文件头。

(7)达到LOG_CHECKPOINT_TIMEOUT的延迟时。

(8)根据参数FAST_START_MTTR_TARGT的设置来确定。

如果当内存中产生的Dirty Buffer所需的恢复时间(estimated_mttr)到达FAST_START_MTTR_TARGET指定时间,那么检查点进程被触发。

通知DBWR进程将按检查点队列顺序将脏数据写入到数据文件,从而缩短了最后检查点位置与Redo日志间的距离,减少实例恢复所需的时间。

3.1.8 可管理性监控程(MMONMMNL

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

例如,当某个度量值违反其阈值时,mmon会进行写入,为最近修改的SQL对象获取快照和统计值。

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

3.1.9 回收器(RECO)

RECO是分布式事务中处理进程故障的进程.

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

可选的后台进程

可选的后台进程是指任何没有被定义为强制的后台进程。

大多数可选的后台进程都是特定于任务或特性的。例如,支持Oracle ASM的后台进程只有在启用该特性时才可用。

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

3.2.1 归档进程(ARCn)

3.2.2 作业队列处理进程(CJQ0Jnnn)

3.2.3 闪回归档 (FBDA)

3.2.4 空间管理协调程序(SMCO)

3.2.1 归档进(ARCn)

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

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

3.2.2 作业队列进程(CJQ0Jnnn)

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

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

Oracle数据库动态管理作业队列进程,从而允许作业队列客户机在需要时使用更多的作业队列进程。当新进程空闲时,数据库释放它们所使用的资源。

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

3.2.3 闪回归档进(FBDA)

闪回数据归档是Oracle Database 11g强大的新特性之一。它可以用安全有效的方式透明地跟踪在数据库中存储的所有数据,并且没有保留期限的限制。这个特性很容易配置,而且拥有高效的存储以及性能。闪回数据归档不依赖于UNDO,通过“AS OF”闪回SQL语句来查看之前在某个时间点的数据,防止意外的数据更新和删除(例如用户的错误操作)或恶意的数据破坏

闪回数据归档进程,归档被追踪的表的历史行到闪回数据归档文件里面。当在被追踪的表上面发生了dml事务的时候,这个进程存储行的前镜像到闪回数据归档里面。它同样保存当前行的元数据。

3.2.4 空间管理协调程序(SMCO)

11g引入extent pre-allocation特性,由SMCO(space management coordinator)负责,其动态spawn子进程Wnnn用于空间分配和回收

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

1Extent预分配

数据文件须开启autoextendSMCO依据历史信息,在表空间里所有尚未达到 maxsize的数据文件间均匀的分配扩展;

2回收临时段

3Securefile lob预扩展/回收

此特性有时会产生意料之外的结果,譬如数据文件扩展到maxsize(但实际数据没有这么大)

AUTOEXTEND Grows To Full Size Without Reason [ID 1459097.1]

Why The Data Files Got Extended Up Over The Weekend [ID 1538442.1]

Slave

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

本节描述Oracle数据库使用的一些从进程。

I / O slave的过程

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

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

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

为了模拟异步I/O,一个进程监视多个从属进程。调用程序进程将工作分配给每个从属进程,它们等待每次写入完成并在完成后向调用程序报告。

在真正的异步I/O中,操作系统等待I/O完成并向程报告,而在模拟异步I/O中,从操作系统等待并向调用者报告。

数据库支持不同类型的I/O slave,包括:

恢复管理器(RMAN)I/O slave

在使用RMAN备份或恢复数据时,可以对磁盘和磁带设备使用I/O从设备。

•Database writer slaves

当计算机有一个CPU时,无法使用多个数据库写进程那么数据库可以将I/O分布在多个从进程上。DBW是惟一一个扫描缓冲区缓存LRU列表以查找要写到磁盘上的块的进程。但是,从I/O执行这些块的I/O

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

在并行执行中,多个进程同时运行一条SQL语句。

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

并行执行与串行执行形成对比,在串行执行中,单个服务器进程执行SQL语句的顺序执行所需的所有处理。例如,为了执行完整的表扫描,例如SELECT * FROM employees,一个服务器进程执行所有的工作

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论