码迷,mamicode.com
首页 > 数据库 > 详细

Oracle Database 进程协作

时间:2018-07-27 17:04:20      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:排队   请求   多次   第一步   数据库   根据   文件中   顺序   语句   

在oracle数据库中真正执行sql语句的主体是服务器进程(Server Process),服务器进程就是客户端的影子进程,全权代理并执行客户端的请求。


服务器进程接收一条sql语句需要修改某个表的记录,那么第一步就是要找到这个表的记录,表的记录都保存在数据文件的某些block中,而CBO可以告知服务器进程如何迅速找到这些block。


服务器进程根据CBO的建议将数据文件中的这些block读取到DB cache的buffer中。


服务器进程在修改某个buffer之前,必须先记录准备如何修改这个buffer并将记录保存在log buffer中,那些记录如何修改buffer的记录称为redolog,之后服务器进程才会真正修改这个buffer,这个被修改的buffer称为dirty buffer。


服务器进程完成buffer的修改后,需要提交这个sql语句,提交就是指lgwr将这个sql语句相关联的redolog从log buffer写入redo log file中,redolog成功写入就代表sql语句已成功提交。至于这个sql语句已经修改的buffer是否已经写回数据文件,与sql语句是否提交没有必然的联系。那么dirty buffer何时写回数据文件呢?在检查点执行过程中,dbwr进程负责将dirty buffer写回数据文件


什么是检查点事件

检查点队列

buffer会根据第一次被修改的时间顺序在检查点队列中排队,如果一个buffer被修改多次,这个buffer在检查点队列中的位置不变。


检查点位置

检查点队列中的每个buffer都会存在与之关联的redo log,检查点队列中的buffer对应的redo log在redo log file中的地址称为检查点位置


检查点事件

ckpt通知dbwr将检查点队列中部分buffer写回数据文件,dbwr将检查点队列中部分buffer写回数据文件后,删除检查点队列中已写回数据文件的buffer,并告知ckpt检查点位置,ckpt将检查点位置写入控制文件


较早时间修改的buffer靠近检查点队列的尾部,最近修改的buffer靠近检查点队列的首部,dbwr应该从检查点队列的尾部选择部分buffer写回数据文件


Oracle Database 进程协作

标签:排队   请求   多次   第一步   数据库   根据   文件中   顺序   语句   

原文地址:http://blog.51cto.com/13598811/2151177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!