后台进程

1. Oracle 进程概述

  1. 进程概念

    进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于:

    进程是动态的概念,即动态创建,完成任务后立即消亡;而程序是一个静态实体。 进程强调执行过程,而程序仅仅是指令的有序集合。

  2. 进程类型

    在 Oracle 数据库服务器中,进程分为用户进程(USER Process)、服务器进程(Server Process)和后台进程(Background Process)3 种。

    • 用户进程

      当用户连接数据库执行一个应用程序时,会创建一个用户进程,来完成用户所指定的任务。

    • 服务器进程

      Oracle 服务器进程由 Oracle 自身创建,用于处理连接到数据库实例的用户进程所提出的请求。

      服务器进程主要完成以下任务:

      1. 解析并执行用户提交的 SQL 语句和 PL/SQL 程序。
      2. 在 SGA 的数据高速缓冲区中搜索用户进程所要访问的数据,如果数据不在缓冲区中,则需要从硬盘数据文件中读取所需的数据,再将它们复制到缓冲区中。
      3. 将用户改变数据库的操作信息写入日志缓冲区中。
      4. 将查询或执行后的结果数据返回给用户进程。
    • 后台进程

      为了保证 Oracle 数据库在任意一个时刻都可以处理多用户的并发请求,进行复杂的数据操作,而且优化系统性能,Oracle 数据库启用了一些相互独立的附加进程,称为后台进程。服务器进程在执行用户进程请求时,会调用后台进程来实现对数据库的操作。

2. Oracle 后台进程

Oracle 实例的主要后台进程包括数据库写入进程(DBWR)、日志写入进程(LGWR)、检查点进程(CKPT)、系统监控进程(SMON)、进程监控进程(PMON)、归档进程(ARCH)、恢复进程(RECO)、锁进程(LCKn)、调度进程(Dnnn)等,其中前 5 个后台进程是必需的。

数据库的后台进程随数据库实例的启动而自动启动,它们协调服务器进程的工作,优化系统的性能。可以通过初始化参数文件中参数的设置来确定启动后台进程的数量。

  1. DBWR

    数据库写入进程负责把数据高速缓冲区中已经被修改过的数据(脏缓存块)成批写入数据文件中永久保存,同时使数据高速缓冲区有更多的空闲缓存块,保证服务器进程将所需要的数据从数据文件中读取到数据高速缓冲区中,提高缓存命中率。

    当下列某个条件满足时,DBWR 进程将启动,将数据高速缓冲区中的脏数据写入数据文件:

    • 服务器进程在数据高速缓存区中搜索一定数量的缓存块后,仍然没有找到可用的空闲缓存块,此时 DBWR 进程将被启动;
    • 检查点发生时,将启动 DBWR 进程;
    • 当数据高速缓冲区中 LRU 列表长度达到初始化参数 DB_BLOCK_WRITE_BATCH 指定值的一半时,DBWR 进程将被启动;
    • DBWR 进程发生超时(约 3s),DBWR 进程将被启动。

    注意:DBWR 进程启动的时间与用户提交事务的时间完全无关。

  2. LGWR

    日志写入进程负责把重做日志缓冲区的重做记录写入重做日志文件中永久保存。

    DBWR 进程在工作之前,需要了解 LGWR 进程是否已经把相关的日志缓冲区中的重做记录写入重做日志文件中。如果还没有写入重做日志文件,DBWR 进程将通知 LGWR 进程完成相应的工作,然后 DBWR 进程才开始写入。这样可以保证先将与脏缓存块相关的重做记录信息写入重做日志文件,然后将脏缓存块写入数据文件,即先写重做日志文件,后写数据文件。

    当下列事件发生时,LGWR 进程会将重做日志缓冲区中的重做记录写入重做日志文件:

    • 用户通过 COMMIT 语句提交当前事务;
    • 重做日志缓冲区被写满三分之一;
    • DBWR 进程开始将脏缓存块写入数据文件;
    • LGWR 进程超时(约 3s),LGWR 进程将启动。
  3. CKPT

    检查点是一个事件,当该事件发生时(每隔一段时间发生),DBWR 进程把数据高速缓冲区中的脏缓存块写入数据文件中,同时 Oracle 将对数据库控制文件和数据文件的头部的同步序号进行更新,以记录下当前的数据库结构和状态,保证数据的同步。

    在执行了一个检查点事件后,Oracle 知道所有已提交的事务对数据库所做的更改已经全部被写入到数据文件中,此时数据库处于一个完整状态。在发生数据库崩溃后,只需要将数据库恢复到上一个检查点执行时刻即可。因此,缩短检查点执行的间隔,可以缩短数据库恢复所需的时间。

    CKPT 进程的作用就是执行检查点,完成下列操作:

    • 更新控制文件与数据文件的头部,使其同步;
    • 触发 DBWR 进程,将脏缓存块写入数据文件。
  4. SMON

    如果由于某种原因系统崩溃了,那么 SGA 中任何没有来得及写入磁盘文件中的信息都将丢失。如果有些已经提交的数据还没有真正写入数据文件中就会丢失了,当数据库重新启动时,SMON 进程将自动执行 Oracle 实例的恢复工作。

    除了进行数据库实例恢复外,SMON 进程还具有以下功能:

    • 回收不再使用的临时空间;
    • 将各个表空间的空闲碎片合并(表空间的存储参数 PCTINCREASE 不为 0 时)。
    • SMON 进程除了在实例启动时执行一次外,在实例运行期间,它会被定期唤醒,检查是否有工作需要它来完成。如果有其他任何进程需要使用 SMON 进程的功能,它们将随时唤醒 SMON 进程。
  5. PMON

    PMON 进程的主要功能包括:

    • 负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源;
    • 清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA、PGA 等资源;
    • 监控调度进程和服务器进程的状态,如果它们失败,则尝试重新启动它们,并释放它们所占用的各种资源。
    • 与 SMON 进程类似,PMON 进程在实例运行期间会被定期唤醒,检查是否有工作需要它来完成。如果有其他任何进程需要使用 PMON 进程的功能,它们将随时唤醒 PMON 进程。
  6. ARCH

    ARCH 进程负责在日志切换后将已经写满的重做日志文件复制到归档目标,以防止写满的重做日志文件被覆盖。

    只有当数据库运行在归档模式,并且初始化参数 LOG_ARCHIVE_START 设置为 TRUE,即启动自动归档功能时,才能启动 ARCH 进程;否则当重做日志文件全部被写满后,数据库将被挂起,等待 DBA 进行手工归档。

© 2020 刘士. All rights reserved.

结果匹配 ""

    没有匹配的结果 ""