Oracle 体系结构-process

Oracle 的进程分类:

1.Client Processes:

用户使用一个应用程序,例如sqlplus,连接数据库,产生的操作系统进程,就是客户端进程;

2.Server Processes:

用来处理相应用户的请求

作用:
	1、Parse and run SQL statements issued through the application
		 解析和运行应用程序提交的SQL语句,包括创建执行计划
	2Execute PL/SQL code	
	     执行PL/SQL代码
	3Read data blocks from data files into the database buffer cache	
	     从数据文件读取数据块到数据库缓冲区中
	4Return results	
	     返回结果
		
	如果是dedicated server,那么,每个session都会产生一个server process;
	如果是shared server,那么oracle server固定产生一定量的server process,所有的会话共享;

3.Background Processes:后台进程

一.PMON(进程监视器)

1.进程监视器负责监视其他进程,如果其他的进程出现异常关闭的情况,进程监视器负责进程恢复。
2.进程监视器负责清理客户端进程所对应的server process的数据库缓存和释放资源。
3.进程监视器负责数据库实例的动态注册(11g,12c有变化)

二.SMON系统监视器

1.执行实例恢复
2.恢复中断的事务
3.清理不再使用的临时段,清理undo表空间

三.DBWR写进程

数据库写进程负责将数据库缓冲的内容(脏buffer)写回数据文件。

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

1.当server process扫描了一定数量的buffer之后,仍然没有找到可用的buffer,触发DBWn写;(40%)
2.根据检查点信息,定期的触发DBWn进程;
3.当发生drop 或者 truncate的时候,触发写进程;
4.表空间置为read only;
5.表空间置为offline;
6.当做begin backup的时候,也会触发DBWn进程;

free buffer wait等待的原因:

   当服务器进程扫描LRU链表寻找可用块时,如果找了百分之40的buffer(百分之40受_db_block_max_scan_pct控制)还没有找到可以覆盖的buffer,进程将停止继续扫描LRU,唤醒DBWR写脏块,同时进程转入睡眠,开始等待free buffer waits。

四.LGWR日志写进程

日志写进程负责管理日志缓冲区,将一段连续的日志缓冲区的内容写到日志文件。
LGWR的触发条件:
	1.用户提交;
	2.日志切换;
	3.每隔三秒钟触发一次;
	4.日志缓冲区达到1/3满,或者容量达到1M,触发LGWR;
	5.DBWn进程触发的时候,首先触发LGWR;

五.CKPT-检查点进程

1.定期让脏块与数据文件进行同步,保证数据库的一致性
2.减少实例恢复的时间(增量检查点的作用)。
3.定期更新数据文件头部以及控制文件中的SCN号。

完全检查点与增量检查点:
完全检查点:将buffer cache中的所有脏块都写回数据文件中。

触发时机:

1.一致性关库。
2.手动触发完全检查点。
3.日志切换(有等待的日志切换)。
4.对数据库执行热备份。

增量检查点:

根据检查点队列,DBWR按照条件定期将脏块写回数据文件,避免一次性的大量写入。

检查点队列:
当buffer cache中的块由不脏变为脏块时,会被链到检查点队列,然后DBWR根据检查点队列来进行写脏块。
DBWR会每三秒醒来,检查LRUW链表上是否有脏块,如果有将其移动到辅助LRUW链表上将其写入,然后从检查点队列中移出,然后检查检查点队列的长度,以及redo的数量来决定是否按照检查点队列写脏块,如果检查点队列的长度(脏块的数量)以及redo的数量不是很多,那么DBWR就不会写脏块。

减少实例恢复时间:
因为DBWR进程是按照自己的写机制来逐渐将检查点队列上的脏块写入,不会一次性全部写入,CKPT进程每三秒醒来,查看DBWR写进度,查看检查点队列头部,将检查点队列头部所指向的LRBA写入控制文件,当实例崩溃重启时,内存中的脏块全部丢失,实例恢复的目标就是检查点队列上的全部脏块,SMON进程会自动读取控制文件中记录的LRBA,即从此处开始进行实例恢复。

你可能感兴趣的:(Oracle 体系结构-process)