Oracle 进程结构

Oracle进程结构


一、概述
一个oracle实例是由进程和存储结构组成。由于不管是否连接到数据库,进程总在进行,所以成为后台进程。

进程与程序的区别
进程是动态创建的,完成任务后就消亡;而程序是静态的实体,程序是可以复制、编辑的。
进程强调的是执行过程,而程序仅仅是指令的有序集合;进程在内存中,程序在外存中。


二、Oracle进程的分类

1、用户进程
用户进程用于执行一个应用程序的代码。用户进程管理同服务器进程的通信。用户进程同服务器进程进行通信是通过程序接口完成的。
当用户执行一个基于ORACLE数据库的应用程序时,客户端就会创建一个ORACLE的用户进程。
用户进程通过连接登录到ORACLE服务器,ORACLE服务器上就产生一个对应的服务器进程;该服务器进程代表运行在客户端的用户进程与服务器通信。

2、服务器进程
服务于客户端的用户进程。
服务器进程又可以分为 专用服务器进程(只为一个用户进程提供服务)、共享服务器进程(可以为多个用户进程提供服务)。
Oracle创建服务器进程处理来自连接上的用户进程的请求。一个服务器进程负责同用户进程的通信,同oracle的交互,执行相关用户进程的请求。
可以配置Oracle以改变每个服务器进程处理的用户进程的数量。
服务器进程的任务:
A、解析并执行用户所提交的SQL语句;
B、搜索SGA区的数据库缓存,决定是否读取数据文件。如果数据块不在SGA区的数据库缓存中,就将其从数据文件中读入;
C、将查询执行的结构数据返回给用户;

3、后台进程
Oracle为每个实例创建后台进程。它们增强了为每个用户进程运行的oracle程序处理的功能。
后台进程异步执行I/O,监事其他oracle进程,提高并行性,改善性能和可靠性。
后台进程(Background Process):
服务器进程是由后台进程提供支持的。
后台进程主要完成的任务是:
A、在内存和外存之间进行I/O操作;
B、监视各个进程的状态;
C、协调各个进程的任务;
D、维和系统的性能;
E、保证系统的可靠性;

常用的后台进程包括:

1)、DBWn(DatabaseWriter)数据库写进程;
说明:将数据库高速缓存中修改的块写入数据文件中。参数DB_WEITER_PROCESSES定义DBWn进程的数量。
因为Oracle使用自动执行写日志操作,所以DBWn不需要执行日志的写操作。DBWn执行批写操作,最少使用的数据首先写到数据文件。

启动条件:
当DIRTY列表中的脏缓存块达到到一定数量(即初始化参数db_block_write_batch指定值的一半),DBWn进程将脏缓存块写入数据文件
(同时ORACLE将对控制文件和数据文件的头部的同步序号SCN进行修改,记录下当前数据库的结构和状态,以保证数据库中物理文件之间的同步);
当在LRU列表中找到一定数量(即初始化参数db_block_max_scan指定的值)的空闲缓存块,
但还不够时,为获得更多的空闲缓存块,DBWn进程将脏缓存块写入数据文件;
当出现检查点LGWR进程通知DBWn进程进行写操作;
一个表空间被置于备份模式、脱机或只读状态时;
DBWn进程出现超时(Time_out)即大约3秒未启动时;
作用:
A、管理高速缓冲区,保证服务器进程总能找到空闲缓存块,以便保存从数据文件中读取的数据块;
B、将DIRTY列表中的脏缓存块写入到数据文件中,获取更多的空闲缓存块;
C、使用LRU算法将最近正在使用的缓存块即命中块,继续保留在LRU列表中,不必重新读取数据文件;
D、DBRn进程通过延迟写入来优化磁盘I/O操作,而服务器进程只在数据高速缓存区中做修改;

备注说明:
DBWn进程在ORACLE中最多可以启动20个该进程;但是最好不要超过CPU的个数,因为每个处理器同时只能运行一个DBWn进程;
ORACLE默认启动一个DBWn进程,启动受初始化参数(DB_WRITER_PROCESS)的限制。可以设置初始化参数DB_BLOCK_CHECKPOINT_BATCH来
设置每当出现检查点时,DBWn进程写入的脏缓存块的最大数量。增大该值,可以延长启动DBWn进程的时间间隔;

2)、LGWR(LogWriter)日志写进程;
说明:重做日志实体是在SGA的重做日志缓冲区中生成的,LGWR将重做日志实体写入在线重做日志文件或文件组。

启动条件:
用户进程通过COMMIT语句提交当前事务;
重做日志高速缓存被写满1/3时,或含有1MB的重做信息时;
DBWn进程需要为检查点清除脏缓存块,即将脏缓存块写入数据文件时;
LGWR进程出现超时,即大约3秒为启动LGWR进程时;

作用:
A、负责管理重做日志高速缓冲区,即将重做日志记录从高速缓存区写入到重做日志文件;
B、如果例程没有启动CKPT检查点进程,则LGWR进程就来完成检查点执行任务;

备注说明:
每个例程只有一个LGWR进程;LGWR进程先于DBWn进程启动;

3)、SMON(SystemMonitor)系统监视进程
说明:在一个失败实例进程启动的时候执行崩溃恢复。
在多实例系统中,一个实例的smon进程为其他失败的实例执行实例恢复。
smon还清除不再使用的临时段,恢复在崩溃中跳过的死亡进程。这些事务会被smon恢复。
smon还将数据库字典占用的表空间空闲盘区连接起来,将空闲空间变成连续,更容易分配。

启动条件:
随ORACLE数据库系统启动;
运行期间ORACLE可以唤醒SMON进程,以检查是否需要执行它所负责的工作;
如果其他任何进程需要使用SMON进程的功能时,将随时唤醒SMON进程。

作用:
A、在例程启动时负责对数据库进行恢复。如果是非正常关闭数据库,则当下次启动例程时,SMON进程会自动读取
重做日志文件,对数据库进行恢复即执行将已提交的事务写入数据文件中、回退未提交的事务等操作;
B、清除已经分配但不再使用的表空间中的临时段。(如果表空间中有大量的盘区,则清除就会花费大量时间,就会影响数据库启动时的性能)
C、合并基于数据字典管理的各个表空间中位置相邻的空闲盘区,使之更容易分配。

备注说明:
如果某个表空间的存储参数PCTINCREASE被设置为0,则SMON进程就不会对该表空间中的空闲盘区进行合并操作。

4)、PMON(ProcessMonitor)进程监视进程
说明:在用户进程失败的时候,执行进程恢复,并负责清除缓存,释放进程使用的资源。

启动条件:
需要启动、清除中断或失败的用户进程时;(即对ORACLE数据库的连接发生崩溃、挂起或其他非正常终止等)
清除操作还包括非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA区、PGA区的资源。
运行期间ORACLE可以唤醒PMON进程,以检查是否需要执行它所负责的工作;
如果其他任何进程需要使用PMON进程的功能时,将随时唤醒PMON进程。
PMON是在单独的数据库中启动的,而分布式数据库中是RECO恢复进程来完成PMON进程的任务的。
作用:
A、恢复中断或失败的用户进程、服务器进程;
B、清除非正常中断的进程留下的孤儿会话;
C、回退未提交的事务,重置活动事务的状态,从系统活动进程中删除用户进程标识号(ID);
D、释放进程所占用的各种资源,并通过自动回退事务来解决死锁,释放用户所拥有的表和行商的锁;
E、定期检查服务器进程和调度进程,如果它们因失败而被异常挂起,则自动重新启动它们;

5)、ARCn(Archiver)归档进程;
说明:将在线重做日志文件拷贝到归档存储介质上。一般一个足够,可以设置参数log_archive_max_processes定义最多10个ARCn进程。
如果当前ARCn进程数量负责太大,lgwr自动启动其他ARCn进程,直到最大10个进程为止。ARCn只有在数据库处于ARCHIVELOG模型下才激活。

启动条件:
发生重做日志切换时(必须是归档模式下,并且初始化参数LOG_ARCHIVE_START为TRUE,如果在归档模式下该参数是FALSE当重做日志文件全部
写满,数据库将会被挂起。);

作用:避免数据库崩溃无法恢复。

备注说明:
一个例程默认只会启动一个归档进程ARCn,当ARCn正在归档一个重做日志文件时,任何其他进程都不能访问这个重做日志文件。
为了避免LGWR进程使用正在归档中的重做日志文件造成数据库被挂起,LGWR进程会根据需要主动启动更多的归档进程。ORACLE最多可以启用10个ARCn。
初始化参数LOG_ARCHIVE_DEST指定了归档日志文件所在的位置;LOG_ARCHIVE_FORMAT指定了归档日志文件的命名格式规则。

6)、RECO(Recoverer)恢复进程;
说明:用于解决在分布式数据库中由于网络或系统失败导致的分布事务悬挂问题。
每隔一段时间,本地reco尝试同远程数据库建立连接,自动完成提交或回滚操作。

启动条件:
在分布式数据库中,RECO恢复进程周期性地启动,以判断是否有服务器进程发生故障,清除失败的事务。
即分布式数据库中启动RECO恢复进程,单独数据库中启动PMON进程监视进程。
如果将数据库设置成分布式事务处理方式,初始化参数DISTRIBUTED_TRANSACTIONS的值设置为大于0,则RECO恢复进程将会自动启动,
如果设置为0,则RECO恢复进程就不会启动。

备注说明:
分布式事务处理是指:事务在分布式数据库上(多个数据库)进行数据更新、删除、插入等操作,即为分布式事务处理。
原理:在发起事务的数据库将作为一个协调器,协调器询问其他数据库是否已做好准备进程事务提交。如果所有的数据库都回应做好准备,则
协调器就会发送一个消息,让事务的提交在所有数据库上永久生效。否则该事务就会在所有数据库上进行回退。该过程被称为两阶段提交。

7)、job Queue Processes工作队列进程
作用:用于批进程。
说明:该进程被动态管理,使得工作队列客户能够在需要的时候使用更多的工作队列。在资源变成闲置的时候,新的进程使用的资源被释放。

8)、Dnnn(Dispatcher)调度进程;
可选后台进程,只有当多线程服务器配置使用的时候才使用。

备注说明:
调度进程是多线程服务器体系架构(共享服务器模式)。调度进程接收用户进程的请求,并将用户进程放入到请求队列中,然后为请求队列中的用户进程
分配以个共享的服务器进程。通过设置初始化参数MTS_DISPATCHERS为不同的网络协议指定调度进程的数量。例如:
MTS_DISPATCHERS='(PROTOCOL=TCP)(DISPATCHERS=5)'

9)、LMS(Lock Manager Server)锁管理器服务器进程
作用:用于Oracle实时应用群集实例内部死锁。

10)、QMNn(Queue Monitor)队列监视器进程
作用:可选后台进程,用于监视Oracle高级队列的消息队列,最多可以配置10个。

11)、LCKn(Lock)锁进程;
备注说明:
ORACL上最大可以有10个锁进程。

RVWR(RecoveryWriter)闪回恢复进程;
CTWR(ChangeTrackingWriter)闪回变化跟踪写进程;
CJQn(JobQueueMonitor)作业队列监视进程;
Jnnn(JobQueue)作业队列进程;

12)、Snnn(SharedServer)共享服务器进程;

SQL语句的执行标准流程
1、建立一个执行该语句所需的显示或隐式游标;
2、在共享SQL区中查找是否有该SQL语句。
2.1如果共享SQL区总没有该SQL语句,则ORACLE就解析该SQL语句,再定义输出结果(即将结果输出给变量,定义输出的位置、类型、结果集等);
3、判断是否使用了绑定变量;
3.1、如果使用,则用户进程提供绑定便利,然后ORACLE进行绑定;
4、ORACLE执行计划,尽可能的进行并行处理操作;
5、执行SQL语句;
6、如果是SELECT查询语句就将结果返回给用户进程,如果是DML(insert、delete、update等)就将执行状态返回给用户进程;
7、关闭游标;

13)、CKPT(CheckPoint)检查点进程;
启动条件:
关闭数据库时;一个重做日志文件被写满而产生日志切换时;满足参数LOG_CHECKPOINT_TIMEOUT(指定检查点之间的时间间隔(以秒为单位));
参数LOG_CHECKPOINT_INTERVAL(指定当一定数量的操作系统数据块(非ORACLE数据块)被写入重做日志文件时,将触发一个检查点)
作用:
A、触发DBWn进程,使其将自上一个检查点之后的全部已经修改的数据块(脏缓存块)写入数据文件中;
B、保持数据库高速缓冲区与数据文件之间数据同步(用最新的检查点信息更新控制文件和数据库文件的文件头);
C、检查点信息会在恢复数据库期间使用,当SMON进程恢复数据库时,SMON会决定最后在数据文件中的检查点。必须将数据文件的文件头和
控制文件中最后记录的检查点之后的联机重做日志文件中的事务编号重新提交到数据文件中。

备注说明:
不要设置不必要的检查点,或迫使不需要的检查点发生;缩短检查点执行的间隔,可以缩短数据库恢复时所需的时间;如果检查点执行的间隔短,
将会产生过多的I/O操作;应该使LOG_CHECKPOINT_INTERVAL设置的操作系统块数与重做日志文件的大小箱匹配;

ORACLE在不同的时刻执行不同级别的检查点,故检查点有可分为4种:
数据库检查点:
每一次重做日志文件切换时都执行数据库检查点;使用NORMAL\TRANSACTIONAL\IMMEDIATE选项关闭数据库时,会执行一个检查点;
此时DBWn进程将数据高速缓存区中的所有脏缓存块都写入数据文件中。
表空间检查点:
将一个表空间设置为脱机状态或备注为BACKUP模式,会执行一个表空间检查点;此时DBWn只会将高速缓存区中的与该表空间相关
的脏缓存块写入数据文件中。
手动检查点:
使用ALTERSYSTEMCHECKPOINT语句来手动设置一个检查点。
时间检查点:
即每隔多久执行一次检查点。可以通过调整(LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL)参数来改变检查点实行的间隔。

4、通信软件和oracle网络服务
Oracle网络服务是oracle的标准接口。支持标准的通信协议,使得计算机见能够通信。


三、Oracle工作原理(基本操作层)

1、在运行Oracle的计算机上启动实例。
2、运行应用的computer在user进程中运行apply,client apply使用Oracle net service驱动程序建立同服务器的连接。
3、服务器进程接收语句,检查包含类似SQL语句的任何共享SQL区,如果发现共享SQL区,服务器进程检查用户的访问权限,并使用已有的SQL区处理语句。
如果没有发现,则为语句分配新的SQL区,使得它能够被编译和执行。
4、服务器进程修改系统全局区的数据,DBWn进程将修改的块写到磁盘中。由于提交了事务,LGWR进程立即在重做日志文件中记录事务信息。
5、如果成功执行事务,服务器进程将通过network发送消息给应用。如果没有执行成功,将返回一个错误信息。

6、在整个过程中,其他后台进程依然运行,检查中断的条件,而且,数据库服务器管理其他用户事务,防止事务请求相同的数据所产生的冲突。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值