Oracle 的进程分类:
1.Client Processes:
用户使用一个应用程序,例如sqlplus,连接数据库,产生的操作系统进程,就是客户端进程;
2.Server Processes:
用来处理相应用户的请求
作用:1、Parse and run SQL statements issued through the application解析和运行应用程序提交的SQL语句,包括创建执行计划2、Execute PL/SQL code执行PL/SQL代码3、Read data blocks from data files into the database buffer cache从数据文件读取数据块到数据库缓冲区中4、Return 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,即从此处开始进行实例恢复。