服务器进程与后台进程


    服务器进程与后台进程也是两个不同的概念,服务器进程也叫做前台进程,在oracle服务器中负责与Client端的连接。每当clinet端产生一个用户进程来连接数据库,数据库会产生相应的服务器进程和端口号来与之进行连接,在专用服务器中哦个这是一对一的关系,在共享服务器中则会采用调度器的机制。


    后台进程则是实例(instance)的一部分,在实例启动的时候,SGA被分配,后台进程也被分配,且分配需要使用的内存(PGA),后台进程具体实施oracle服务器中的操作,打个比方的话,类似于工地上干活的工人,分工明确。后台进程仅仅占用PGA很小的一部分,严谨的来说PGA在实例启动的时候就已经分配了一部分了(只不过占比重很小),而其余大部分都是在用户进行连接的时候进行分配的,因为PGA大部分都分配给进行客户连接的服务器进程。

后台进程简单描述

    

    之前已经对后台进程进行了简单的介绍,接下来对常用的后台进程进行简单的介绍:

    SMON:在实例启动的时候执行恢复(如果需要),还负责清楚暂时不使用的临时段。SMON会定期的查看是否需要该进程。其他进程在需要的时候也可以对SMON进行调用。

    PMON:在用户进程失败时进行进程恢复(在我理解是清除所有该用户进程的信息):1.清除buffer cache;2.释放该用户进程所占用的所有资源。PMON还负责监视是否发生空闲会话超时和将数据库的服务动态监听到监听程序。

    PMON会自动的重新启用任何已经停止运行的分派程序和服务器进程。(主要对服务器进程进行管理)

    DBWn:将buffer cache中修改过的数据写入数据文件。写入磁盘有两种方式:1.在执行其他处理的时候异步写入(先写一部分)2.定期执行以推进检查点。

    回写脏块的操作会在以下情况发生:1.全局检查点; 2.关闭数据库; 3.drop表;以及脱机表空间的时候发生。

    LGWR:这个进程的作用相对和DBWn进程的作用都相对单一而且易于理解,LGWR是将redo log buffer中的缓存信息写入redo log file中,LGWR在以下条件中将会被触发:1.redolog buffer被占用1/3; 2.切换日志文件; 3.每3s; 4.在DBWn将dirty block写入数据文件之前; 5用户commit事务处理; 6.redo log buffer占用1M。

    CKPT:将检查点信息写入控制文件和每个数据文件头。当系统发起全局检查点的时候,会通知DBWn将dirty block全部写回数据文件,这时如果大量累积了dirty block,这对DBWn将会是一个非常大的工作量。为了减少这种工作量和减少实例恢复时所要通过redolog恢复的dirty block的数量以减少实例恢复时间,引入了增量检查点。

    发起增量检查点仅仅会对控制文件操作,CKPT定期触发DBWn,CKPT通知DBWn将check point queue中的 dirty block写回数据文件,减小了DBWn的工作量也提高了io效率。

   完全检查点可以通过手动触发(执行Alter system checkponit;),也会在切换日志,shutdown immediate等条件下触发。

    RECO:用于分布式数据库的配置。

    

    后台进程还有许多,这里简单介绍常用的几种,很多进程的作用相对复杂,需要更深入的对体系结构进行理解和深入的探索。