ORACLE的后台进程

 回顾了一下ORACLE后台进程相关的知识,写篇博客记录一下。
 认识ORACLE实例的两大基础内存结构和后台进程。ORACLE的后台进程架构根据操作系统的不同有可能存在差异。对于WINDOWS系统,ORACLE的后台进程是作为操作系统中进程的执行线程运行的。而LINUX或者UNIX系统,可以是操作系统进程也可以是进程中的执行线程。需要说明的是,在12c之前,ORACLE进程在Linux和UNIX系统中不能作为线程运行;12c开始,多线程Oracle数据库模型才开始让oracle数据库可以作为操作系统线程在单独的地址空间运行,可以通过将系统参数THREADED_EXECUTION设置为TRUE,让数据库运行在线程模式。

 ORACLE进程架构可以分为客户端进程和服务端进程。服务端进程又包含了server process,background process和作为server process与background process辅助的slave process。通过V$PROCESS可以查看oracle后台进程对应的操作系统线程的线程ID和进程ID。下面主要对后台进程进行了一个简单的归纳。

1.Process Monitor Process (PMON) Group

 其中包含了三类后台进程PMON, Cleanup Main Process (CLMN), 和 Cleanup Helper Processes (CLnn)。主要负责监控以及清理其他的进程,在某些情况下PMON进程组也负责对损坏的不可恢复的资源进行隔离,避免数据库实例关闭。
 PMON进程检测后台进程是否终止,并负责对必要的进程尝试恢复。PMON会将清理工作委托给CLMN进程作为清理工作的主进程,CLMN会周期性的去清理中断的进程、会话、事务、网络连接、空闲回话以及超时的网络连接和事务等。CLnn协助CLMN清理中断的进程和会话。CLnn可以存在多个,数量和当前需要清理的工作量和当前清理效率成正比。

2.Process Manager (PMAN)

 负责监视、启动和关闭以下进程:

  • 调度器和共享服务进程
  • pooled server process
  • Job queue processes
  • 可重启的后台进程

3.Listener Registration Process (LREG)

 负责数据库实例监听注册的相关任务。在12c之前的版本,该部分工作由PMON进程负责。

4.System Monitor Process (SMON)

 负责各种系统级的清理工作,SMON会周期性的检查是否需要进行以下工作:

  • 在数据库启动时负责实例恢复
  • 恢复因为数据文件或者表空间错误而在实例恢复阶段跳过的事务。当数据文件或者表空间online的时候执行中断事务的恢复。
  • 清理不再使用的temporary segments
  • 在dictionary-managed表空间中合并连续的extents

5.Database Writer Process (DBW)

 该进程负责将buffer cache的脏数据写入到磁盘。DBW进程根据LRU算法,将最近最少被使用的buffer写入磁盘,以让其它的数据内容可以写入该缓存,如果写出磁盘的速度不够快,那么可能导致Free Buffer Waits等等待事件。大部分情况只需要一个DBW(DBW0)进程就足够了,但是可以通过DB_WRITER_PROCESSES参数(其默认值为1或者1/8CPU数)来配置多个DBW进程(DBW1 through DBW9, DBWa through DBWz, and BW36 through BW99)来满足较大数据量的写入工作,此时也可以开启异步I/O来提升写的性能。
 存在以下情况时,DBW进程会开始工作:

  • 当服务器进程在BUFFER CACHE的threshold之下无法找到干净可用的内存空间时
  • 数据库执行checkpoint操作时
  • 修改表空间或数据文件off line时

6.Log Writer Process (LGWR)

 进程负责将online redo log buffer的数据写入到在线重做日志,其会记录所有的DML和DDL操作,用于实例的恢复。以下情况该进程会将buffer的数据写出:

  • 用户提交事务
  • 执行日志切换
  • 每3S定期执行一次
  • redo log buffer使用了1/3以上或则达到了1mb
  • 根据write-ahead协议,DBW进程执行数据写入之前会先执行online redo log的写入

 一般情况下会创建多组online redo log file,并在其他地方创建相应的镜像,避免日志组全部不可用导致无法正常使用数据库。

7.Checkpoint Process (CKPT)

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

  • 数据库一致性关闭的时候
  • ALTER SYSTEM CHECKPOINT语句手动执行
  • Online redo log 切换时
  • 执行ALTER DATABASE BEGIN BACKUP语句时
  • 将表空间或者数据文件切换为只读或者离线
  • 执行ALTER TABLESPACE BEGIN BACKUP命令
  • DBW进程写的时候,但是此时只将检查点信息写入控制文件,而不会写到数据文件头

8.Manageability Monitor Processes (MMON and MMNL)

 执行与AWR相关的任务。

9.Archiver Processes (ARCn)

 仅在归档模式下存在,将online redo log files归档到离线存储(归档日志文件)中。还可以收集事务的重做数据并将其传输到备用数据库目标。

10.Job Queue Processes (CJQ0 and Jnnn)

 CJQ0 and Jnnn用户执行用户创建的定时作业。CJQ0根据ORACLE SCHEDULER周期性的去遍历JOB$表来获取需要执行的作业。获取到作业后,创建Jnnn从属进程来执行相应的JOB。当完成相应作业之后继续轮询是否还有需要执行的作业。如果暂时没有作业需要执行,它会进入休眠状态,并周期性的被唤醒来轮询是否有需要执行的作业。当超出指定的间隔后,该进程会被终止。
 可以通过JOB_QUEUE_PROCESSES系统参数来指定最大的Jnnn进程数。