Oracle数据库创建服务器进程说明

avatar
作者
猴君
阅读量:4

服务器进程

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

作用:

  • 解析并运行通过应用程序发布的SQL语句,包括创建和执行查询计划
  • 执行PL / SQL代码
  • 将数据文件中的数据块读入数据库缓冲区高速缓存(DBW后台进程的任务是将修改后的块写回到磁盘)
  • 返回结果的方式使应用程序可以处理信息

服务器进程主要有两种

  • 共享服务器进程(例如mysql)
  • 专有服务器进程 (oracle)

在专用服务器连接中,客户端连接仅与一个服务器进程关联。服务器进程在其PGA中存储特定于进程的信息和UGA。oralce就是专有服务器进程,每一个连接对应一个服务器进程

后台进程

进程监控进程(PMON)组

  • PMON 进程监控进程

    检测其他后台进程的终止

    执行异常终止的后台进程恢复

  • CLMN 清理主要进程

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

  • CLnn 清理辅助进程

    CLMN将清理工作委托给CLnn协助清理进程。辅助进程的数量与要完成的清理工作量和当前的清理效率成正比。

这些进程负责监视和清除其他进程, 数据库必须确保释放已终止进程所拥有的资源,以便其他进程可以使用它们

数据库资源隔离,PMON组可以自动隔离损坏的不可恢复的资源,以便不会立即强制终止数据库实例。PMON组继续对保存隔离资源的进程或会话执行尽可能多的清除。

ProcessMonitor (PMON): 该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释放该进程所使用的资源。例:它要重置活动事务表的状态,释放封锁,将该故障的进程的ID从活动进程表中移去。PMON还周期地检查调度进程(DISPATCHER)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。

PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。

PMON进程还负责在反常中断的连接之后的清理工作。例如,如果因某些原因专用服务“故障”或被kill掉,PMON就是负责处理(恢复或回滚工作)和释放你的资源。PMON将发出未提交工作的回滚,释放锁,和释放分配给故障进程的SGA资源。

除了在异常中断之后的清理外,PMON监控其他oracle后台进程,如果有必要(和有可能)重新启动他们。如果共享服务或一个分配器故障(崩溃),PMON将插手并且重启另一个(在清理故障进程之后)。PMON将观察所有Oracle进程,只要合适或重启他们或中止进程。例如,在数据库日志写进程事件中,LGWR故障,实例故障。这是一个严重的错误,最安全的处理方法就是去立即终止实例,让正常的恢复处理数据。(注意这是很少发生的事情,应该立即报告oracle支持)。

PMON为实例做的另一件事是去使用OracleTNS监听器登记。当一个实例开启的时候,PMON进程投出众所周知的端口地址,除非指向其他,来看是否监听器正在开和运行着。众所周知/默认端口是使用1521。现在,如果监听器在一些不同端口开启会发生什么?这种情况,机制是相同的,除了监听器地址需要被LOCAL_LISTENER参数明确指定。如果监听器运行在库实例开启的时候,PMON和监听器通讯,传到它相关参数,譬如服务器名和实例的负载度量。如果监听器没被开启,PMON将周期性的试着和它联系来登记自己。

If abackground process fails, the PMON process performs the cleanup operations byperforming the following tasks:

  • Rolls back the user’s current transaction
  • Releases all the locks that are held on tables or rows
  • Frees other resources used by the users
  • Restarts the dead dispatcher

进程管理器(PMAN)

PMAN监视,产生并停止以下类型的过程

  1. 分派器和共享服务器进程
  2. 数据库驻留连接池的连接代理和池化服务器进程
  3. 作业队列流程
  4. 可重启后台程序

PMAN监督几个后台进程,包括共享服务器,池化服务器和作业队列进程。

监听器注册进程(LRGE)

监听器登记处理(LREG)有关数据库实例和调度程序进程与Oracle网络监听信息。

实例启动时。LREG会轮询侦听器以确定它是否正在运行。如果侦听器正在运行,则LREG会传递相关参数;反之,LREG会定期尝试与它联系。

系统进程监控进程(SMON)

System Monitor (SMON): 该进程在实例启动时执行实例恢复,还负责清理不再使用的临时段。在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。

SMON还负责做所有系统级的工作。相对于PMON对单个进程感兴趣,SMON是一个系统级别的观点,是一种用于库的“垃圾收集者”。它做的工作包括如下7件:

  1. 清理临时表空间:伴随着“真正”的临时表空间的出现,清理临时表空间的杂事已经减轻了,但它还没完全消失。例如,当建立一个索引,在创建期间分配给索引的扩展区被标志为TEMPORARY。如果CreateIndex会话因某些原因异常中断,SMON负责清理他们。其他操作创建的临时扩展区,SMON同样会负责。
  2. 接合空闲空间:如果你正使用数据字典管理表空间,SMON负责把那些在表空间中空闲的并且互相是邻近的extent接合成一个较大的空闲扩展区。这发生仅在带有默认的pct increase设置为非零的存储子句的字典管理表空间。
  3. 把对于不可用文件的事务恢复成活动状态:它的角色类似在库启动期间。这时,因为文件不能用于恢复,SMON恢复在实例/崩溃恢复期间被跳过的故障事务。例如,文件可能已经在不可用或没装载的磁盘上。当文件变可用了,SMON将恢复它。
  4. 执行一个RAC中故障节点的实例恢复:在一个oracleRAC配置中,当群集中的一个库实例失败(例如,实例正执行的机器故障了),一些群集中的其他节点将开启故障的实例的重做日志文件,为故障实例执行所有数据的恢复。
  5. 清理OBJ : O B J :OBJ OBJ是一个包含库中几乎每一个对象(表,索引,触发器,视图等等)的记录的行级数据字典表。许多次,这儿存在的记录代表已删对象,或代表不在这儿的对象,在oracle的信赖机制中被使用。SMON是删除这些不在被需要的行的进程。
  6. 收缩回滚段:SMON将执行回滚段的自动收缩到它的optimal尺寸,如果它被设置。
  7. “脱机”回滚段:对于DBA来,让一个有active事务的回滚段,脱机或不可用,这事是可能的。Active事务正使用这脱机回滚段是可能的。在这情况下,回滚不是真正的脱机;它被标志为“悬挂offline”。在后台进程中,SMON将周期性尽力让它真正脱机,直到成功。它做许多其他事情,譬如存在DBA_TAB_MONITORING视图中的监控统计数据的洗刷,在SMON_SCN_TIME表中发现的时间戳定位信息的SCN的洗刷,等等。SMON在期间能消耗很多CPU,这应该被认为是正常的。SMON周期性的苏醒(或被其他后台进程叫醒)来执行这些管家的家庭杂事。

If an Oracle instance crashes, any changes that are made in the SGA are notwritten to the data files. When you restart the instance, the SMON backgroundprocess automatically performs instance recovery by performing the followingtasks:

  • Rolling forward changes that are made in the online redo log files but not inthe data files. Since all the committed transactions are written to the onlineredo log files, these are successfully recovered as result of rolling forwardchanges from the online redo log files to the data files.
  • Opening the database. After the database is opened, users can log on and accessany data that is not locked by un-recovered transaction.
  • Rolling back all the uncommitted transactions.

数据库写进程(DBWn)

DBW进程将数据库缓冲区高速缓存中的已修改缓冲区写入磁盘。(数据量大时会增加进程数DBW0~DBW99)。

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

  1. 当服务器进程在扫描阈值数量的缓冲区后无法找到干净的可重用缓冲区时,它会向DBW发出写信号。
  2. DBW定期写入缓冲区以推进检查点,检查点是重做线程中从其开始实例恢复的位置。

日志写入进程(LGWR)

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

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

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

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

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

检查点进程(CKPT)

检查点进程(CKPT)更新控制文件和数据文件头与检查点信息和DBW到写入块到磁盘的信号。

检查点信息包括检查点位置,SCN和联机重做日志中开始恢复的位置。

memory manager(MMAN)

MMAN内存管理,如果设定了 SGA自动管理,MMAN用来协调SGA内各组件的大小设置和大小调整。

Memory Monitor(mmon)

在Oracle不同的文档中,对这两个进程的解释存在歧义。MMON应该是 Memory Monitor 的缩写,但是在有的文档中被记录为Manageability Monitor,这应当是10g早期版本中的称呼,只不过后来发生了变更。

这个进程的主要作用如下:

The memory monitor (MMON) process was introduced in10g and is associated with the Automatic Workload Repository new features used for automatic problem detection and self-tuning. MMON writes out the requiredstatistics for AWR on a scheduled basis.

MMON主要用于AWR,ADDM,MMON会从SGA将统计结果写到系统表中

MMON(Manageability Monitor Process,可管理性监视器进程)和它的slave进程(Mnnn)主要用来维护AWR信息和各种与可管理性相关的后台任务,具体包括:

  1. 启动slave进程Mnnn去做AWR快照。若MMON进程HANG住,则AWR不可用。

  2. 当某个测量值(metrics)超过了其度量阀值(threshold value)时发出alert告警。

  3. 为最近改变过的SQL对象捕获指标信息。

The Memory Monitor Light (MMNL)

this process is a new process in 10g which works with the Automatic Workload Repository new features (AWR) to write out full statistics buffers to disk as need

(这个as need怎么理解呢?mmon进程主要是内存中sql信息,ash信息的收集工作,如果这些信息需要写入到磁盘(即一些数据字典表)中,那么就需要MMNL进程负责写入。)

另外一个进程是 MMNL ,是 Memory Monitor Light (MMNL)的缩写,在部分文档中记录为 Manageability Monitor Light

对mmon和mmnl进程的一个协调工作总结:

MMON、MMNL和Mnnn这些进程用于填充自动工作负载存储库(Automatic Workload Repository,AWR),这是Oracle 10g中新增的一个特性。MMNL进程会根据调度从SGA将统计结果刷新输出至数据库表。MMON进程用于“自动检测”数据库性能问题,并实现新增的自调整特性。Mnnn进程类似于作业队列的Jnnn或Qnnn进程;MMON进程会请求这些从属进程代表它完成工作。Mnnn进程本质上是临时性的,它们将根据需要来来去去。

由此可见,MMON和MMNL进程宕掉是awr不能自动收集的根本原因。

若MMON或MMNL进程被kill掉了,则Oracle会自动启动这两个进程,也可以通过执行如下命令来手动启动这两个进程:

ALTER SYSTEM ENABLE RESTRICTED SESSION;   -- 启用 ALTER SYSTEM DISABLE RESTRICTED SESSION;  -- 取消  -- Oracle自动启动MMON进程时的告警日志: Fri Oct 13 02:06:43 2017 Restarting dead background process MMON Fri Oct 13 02:06:43 2017 MMON started with pid=42, OS id=7647   -- 执行“ALTER SYSTEM ENABLE RESTRICTED SESSION;”时的告警日志: Fri Oct 13 02:13:14 2017 Stopping background process MMNL Stopping background process MMON Starting background process MMON Starting background process MMNL Fri Oct 13 02:13:15 2017 MMON started with pid=16, OS id=7853  ALTER SYSTEM enable restricted session; Fri Oct 13 02:13:15 2017 MMNL started with pid=42, OS id=7855 

恢复进程(RECO)

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

归档进程(ARCn)

一个归档进程程序(ARCn)副本联机重做日志文件到离线存储重做日志切换发生后。

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

作业队列进程组(CJQ0)(Jnnn)

动态作业队列进程可以在给定的时间间隔内同时运行许多作业:

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

闪回数据存档进程(FBDA)

闪回数据存档进程(FBDA)是后台进程,提供了在表的整个生命周期内跟踪和存储表中事务性更改的功能。这样,您可以及时向后闪回表,以恢复表的状态。

提交修改跟踪表的事务时,FBDA会检查是否正在⽣成新的Undo,过滤与标记为存档的对象相关的内容,并将Undo信息复制到闪回数据存档表空间中。FBDA维护当前行上的元数据,并跟踪已存档的数据量。

FBDA还负责自动管理闪回数据存档的空间,组织(分区表空间)和保留时间。FBDA还跟踪已跟踪交易的归档进度。

FBDA可以作为线程或操作系统进程运行。

空间管理协调进程 (SMCO)

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

典型的任务包括主动空间分配和空间回收。SMCO动态产生从属进程(W nnn)以执行任务。

I/O从属进程(Innn)

I / O从属进程(Innn)为不支持异步I/O的系统和设备模拟异步I / O,异步I / O中,传输没有时序要求,从而使其他进程可以在传输完成之前启动数据库支持不同类型的I / O从站,包括:

  1. Recovery Manager(RMAN)的I / O从属 使用RMAN备份或还原数据时,可以将I / O从属设备同时用于磁盘和磁带设备。
  2. 如果使用多个数据库编写器进程不切实际(例如,当计算机只有一个CPU时),则数据库可以在多个从属进程上分配I / O。DBW是唯一扫描缓冲区高速缓存LRU列表以查找要写入磁盘的块的进程。但是,I / O从属为这些块执行I / O。

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

查询协调器

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

负责以下工作:

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

生产和使用

生产者负责处理其数据,然后将其分发给需要它的使用者

并行执行中,多个进程同时运行以运行单个SQL语句。通过在多个进程之间划分工作,Oracle数据库可以更快地运行该语句。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!