(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进程监控进程
-在用户进程失败时执行进程恢复
-清除数据库缓冲区高速缓存
-释放该用户进程使用的资源
-监控会话,查看是否发生空闲会话超时
-在监听程序中动态注册数据库服务
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
相关推荐
@server=‘LinkServer‘, --链接服务器别名。@datasrc=‘192.168.1.1‘ --要访问的的数据库所在的服务器的ip. ‘******‘ --要访问的数据库,用户的密码