(Les01 Architecture III 进程结构)[20180113]

进程体系结构

(Les01 Architecture III 进程结构)[20180113]

-用戶进程:连接到Oracle DB的应用程序或工具

-数据库进程

-服务器进程:连接到Oracle实例,在用户建立会话时启动

-后台进程:在启动Oracle实例时启动

-守护程序/应用程序进程

-网络监听程序

-Grid infrastructe守护程序

专用服务器,对于每个会话,运行数据库应用程序的用户进程都由执行Oracle DB服务器的服务器进程提供服务。

共享服务器,不必为每个连接都提供一个专用服务器进程。分派程序会将多个传入网络会话请求定向到共享服务器进程池。共享服务器进程为所有客户端请求提供服务。

服务器进程

-对通过应用程序发出的SQL语句进行语法分析并运行语句

-从磁盘上的数据文件中将必要的数据块读取到SGA的共享数据库缓冲区中(如果这些数据块目前尚未在SGA中)

-返回结果,使应用程序可以处理信息

后台进程

Oracle DB系统使用的进程统称为“后台进程”,一个Oracle DB实例可以有多个后台进程。

非RAC、非ASM环境中常见后台进程

-DBWn 数据库写进程

-LGWR 日志写进程

-CKPT 检查点进程

-SMON 系统监控进程

-PMON 进程监控进程

-RECO 恢复器进程

-CJQ0 作业队列协调程序

-Jnnn 作业从属进程

-ARCn 归档进程

-QMNn 队列监控进程

更高级的配置(如RAC)会有其他后台进程。有关后台进程的详细信息,请参考V$BGPROCESS视图

有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。

其他进程结构不是单个数据库独有的,而是可以在同一个服务器上的多个数据库间共享的。Grid Infrastructure进程和网络进程则属于此类。

Liunx和Unix系统上Grid Infrastructure进程包括

-ohasd:Oracle高可用性服务守护程序,负责启动Oracle Clusterware进程。

-ocssd:集群同步服务守护程序

-diskmon:磁盘监视守护程序,负责监视HP Oracle Exadata Storage Server的输入和输出

-cssdagent:启动、停止和检查CSS守护程序ocssd的状态

-orarootagent:一种专用的Oracle代理进程,可帮助管理root用户所拥有的资源(如网络)

DBWn数据写进程

参数:db_writer_processes

将数据库缓冲区高速缓存中经过修改的缓冲区(脏数据)写入磁盘有两种方式:

-在执行其它处理时异步执行

-推进检查点

数据库写进程(DBWn)将缓冲区的脏数据写入数据文件。大多数系统来说,一个数据库写进程(DBWn)已经足够,但如果系统需要频繁修改数据,也可以配置附加进程(DBW1到DBW9或DBWa到DBWz)来改善写入性能。这些附加进程在单处理器系统中没有作用。

当数据库缓冲区高速缓存中的某个缓冲区数据被修改时,系统会将其标记为脏数据,并将其添加到按SCN顺序排列的检查点队列的头中。因此,该顺序与这些更改的缓冲区的重做条目写入重做日志的顺序一致。当缓冲区高速缓存中的可用缓冲区的数量低于某个内部闸值时,DBWn会将不经常使用的缓冲区写入数据文件,写入顺序是从LRU列表的尾部开始,从而使进程可以在需要缓冲区时替换它们。DBWn也会从检查点队列的尾部写入,以保护检查点向前推进。

SGA中有一个内存结构保存了重做流中位置的重做字节地址(RBA),当实例发送故障时,将从该位置开始恢复。此结构充当指向重做的指针,并且由CKPT进程按照每三秒一次的频率写入控制文件。由于DBWn按照SCN顺序写入脏数据,而重做按照SCN顺序执行,因此每当DBWn从LRU列表写入脏数据时,还会将SGA内存结构中保持的指针前移,以便实例恢复(如果需要)从近似正确的位置开始读取重做,并避免不必要的I/O。这称为"增量检查点"。

LRU算法将更频繁访问的块保存在缓冲区高速缓存中,以尽可能地减少磁盘读取。可对表使用cache选项,以帮助延长块在内存中的保留时间。

DB_WRITER_PROCESSES初始化参数指定了DBWn进程的数量。DBWn进程的最大数量为36。如果用户在启动过程中未指定该进程数,Oracle DB将根据CPU和处理器组的数量来决定如果设置DB_WRITER_PROCESSES。

DBWn数据库写进程触发条件:

-产生检查点CKPT

-脏数据缓冲区达到阀值 默认10%

-扫描整个data buffer 没有空闲data buffer 中包含脏的和未脏的,优先写脏数据列表再写未脏块

-timeout 超时,如果DBWn 没事做 会被每三秒唤醒一次去巡检 写不写不一定

-表级别的truncate 或 drop 也会触发数据写

-修改表空间的 read only

-做表空间的offline (离线)

-热备份 begin backup 命令

在所有情况下,DBWn均执行批量(多块)写操作以提高效率。多块写操作中写入的块数因操作系统而异。

LGWR日志写进程

将重做日志缓冲区写入磁盘上的重做日志文件中。重做日志缓冲区是循环缓冲区,当LGWR将重做日志缓冲区的重做条目写入重做日志文件时,服务器进程随后可以复制新条目,覆盖重做日志缓冲区中的那些已写入磁盘的条目。LGWR的写入速度通常足够快,可以确保缓冲区中始终有空间可供新条目使用,即使对重做日志的访问量很大时也是如此。LGWR将缓冲区的一个连续部分写入磁盘。

LGWR日志写进程触发条件:

-用户进程提交事务处理时

-重做日志缓冲区的三分之一已满时

-DBWn进程将经过修改的缓冲区写入磁盘(如果需要)之前

-重做日志缓冲区达到1M的redo条目

-每隔3秒

CKPT检查点进程

“检查点”是一种数据结构,它定义了数据库的重做线程中的系统更改号(SCN)。检查点记录在控制文件和每个数据文件头中。它们是恢复操作的关键元素。

CKPT检查点进程在DBWn将高速缓冲区中的脏数据写入数据文件时触发,它会校验写入所有相关的数据文件的头部,还将校验点号码、重做日志序列号、归档日志名称和最低/最高SCN号都会写入控制文件中。

CKPT检查点进程触发条件:

-log_checkpoint_timeoute时间阀值达到

-log_checkpoint_interval*操作系统块大小

-redo log switch & alter system checkpoint,日志切换和显式生成检查点

-热备 begin backup

-表空间offline&read only、shutdown immediate和direct read

SMON系统监控进程

-实例启动时执行恢复。执行前滚,将已经写入重做日志文件但是还没写入到数据文件中的数据(scn号来识别提交的记录),打开数据库,回滚没有提交的事务。

-清除不使用的临时段。回收或合并数据文件相连的空闲区,释放临时段。

PMON进程监控进程

-在用户进程失败时执行进程恢复

-清除数据库缓冲区高速缓存

-释放该用户进程使用的资源

-监控会话,查看是否发生空闲会话超时

-在监听程序中动态注册数据库服务

(Les01 Architecture III 进程结构)[20180113]

RECO(恢复器进程)

-用于分布式数据库配置

-分布式事务处理有问题时自动连接其它涉及的数据库

-自动解决所有有问题的事务

-删除对应有问题的事务的所有行

ARCn(归档进程)

数据库开启归档模式,alter database archivelog;

-在发生日志切换之后,将重做日志文件复制到指定的存储路径

-收集事务处理重做数据,并将该数据传输到备用目标位置

目标位置log_archive_dest_1~31(11g),前1~10主要存放local本地路径(也可以存放Service名),11~30存放Service不能存放local本地路径。

ARCn归档进程最大数量的控制参数:LOG_ARCHIVE_MAX_PROCESSES

https://docs.oracle.com/cd/E11882_01/server.112/e25494/archredo.htm#ADMIN00801

Jnnn(作业从属进程)&CJQ0 (作业队列协调程序 )

它们可以被看作是一个调度程序服务,用来将作业Oracle数据库实例上的PL/SQL语句或过程。

-Jnnn作业从属进程(或作业队列进程)是动态管理的。

-CJQ0 作业队列协调程序会定期从JOB$表选择并运行Jnnn作业

-CJQ0进程动态生成作业从属进程(J000-J999)

-Jnnn进程由CJQ0进程选择的一个作业来执行。这些进程一次运行一个作业(job)

-该进程完成后,它将轮询更多的作业(job)。如果没有计划执行的作业则进入休眠状态,并从中定期唤醒其他作业。如果进程没有找到新的作业,则在预设的时间间隔后中止。

同时执行最大的Jnnn进程数的参数:job_queue_processes

这些进程与其他Oracle数据库后台进程不同,该进程故障不会导致实例失败。

QMNn(队列监控进程)

QMNn队列监控进程是Oracle Streams Advanced Queuing的可选后台进程,用于监控消息队列。

-最多可以配置10个QMNn队列监控进程。

这些进程与其他Oracle数据库后台进程不同,该进程故障不会导致实例失败。

参考:

https://docs.oracle.com/cd/E11882_01/server.112/e40540/process.htm#CNCPT9840

相关推荐