永发信息网

oracle实例中5个后台进程的执行顺序

答案:2  悬赏:20  手机版
解决时间 2021-03-05 17:03
oracle中5个后台进程(SMON,PMON,LGWR,DBWR,CKPT)的时候就在想它们执行的先后顺序是什么呢?
最佳答案
这5个oracle的强制进程,没有什么先后顺序,而是需要哪个进程服务时候,就触发哪个进程,例如:要写往数据文件中写入数据,则触发dbwr,要恢复实例时就会由smon来完成,等等
全部回答

1、dbwr进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个oracle后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,dbwr的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,dbwr将管理缓冲存储区,使用户进程总可得到未用的缓冲区。

oracle采用lru(least recently used)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使i/o最小。在下列情况预示dbwr 要将弄脏的缓冲区写入磁盘:

当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知dbwr进行写。该临界长度是为参数db-block-write-batch的值的一半。

当一个服务器进程在lru表中查找db-block-max-scan-cnt缓冲区时,没有查到未用的缓冲区,它停止查找并通知dbwr进行写。出现超时(每次3秒),dbwr 将通知本身。当出现检查点时,lgwr将通知dbwr.在前两种情况下,dbwr将弄脏表中的块写入磁盘,每次可写的块数由初始化参数db-block- write-batch所指定。如果弄脏表中没有该参数指定块数的缓冲区,dbwr从lur表中查找另外一个弄脏缓冲区。

如果dbwr在三秒内未活动,则出现超时。在这种情况下dbwr对lru表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,dbwr查找一个新的缓冲区组。每次由dbwr查找的缓冲区的数目是为寝化参数db-block- write-batch的值的二倍。如果数据库空运转,dbwr最终将全部缓冲区存储区写入磁盘。

在出现检查点时,lgwr指定一修改缓冲区表必须写入到磁盘。dbwr将指定的缓冲区写入磁盘。

在有些平台上,一个实例可有多个dbwr.在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。参数db-writers控制dbwr进程个数。

2、lgwr进程:该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个oracle后台进程。lgwr进程将自上次写入磁盘以来的全部日志项输出,lgwr输出:

◆当用户进程提交一事务时写入一个提交记录。 ◆每三秒将日志缓冲区输出。 ◆当日志缓冲区的1/3已满时将日志缓冲区输出。 ◆当dbwr将修改缓冲区写入磁盘时则将日志缓冲区输出。

lgwr进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,lgwr可继续地写入该组的其它文件。

日志缓冲区是一个循环缓冲区。当lgwr将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。lgwr 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。

注意:有时候当需要更多的日志缓冲区时,lwgr在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。

oracle使用快速提交机制,当用户发出commit语句时,一个commit记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(scn),它同事务日志项一起记录在日志中。由于scn记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。

3、ckpt进程:该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由lgwr执行。然而,如果检查点明显地降低系统性能时,可使ckpt进程运行,将原来由lgwr进程执行的检查点的工作分离出来,由ckpt进程实现。对于许多应用情况,ckpt进程是不必要的。只有当数据库有许多数据文件,lgwr在检查点时明显地降低性能才使ckpt运行。 ckpt进程不将块写入磁盘,该工作是由dbwr完成的。初始化参数checkpoint-process控制ckpt进程的使能或使不能。缺省时为false,即为使不能。

    由于oracle中lgwr和dbwr工作的不一致,oracle引入了检查点的概念,用于同步数据库,保证数据库的一致性。在oracle里面,检查点分为两种:完全检查点和增量检查点。下面我们分别介绍这两种检查点的作用:

1、完全检查点

    在oracle8i之前,数据库的发生的检查点都是完全检查点,完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,并且同步数据文件头和控制文件,保证数据库的一致。完全检查点在8i之后只有在下列两种情况下才会发生:

(1)dba手工执行alter system checkpoint的命令;

(2)数据库正常shutdown(immediate,transcational,normal)。

由于完全检查点会将所有的脏数据库块写入,巨大的io往往会影响到数据库的性能。因此oracle从8i开始引入了增量检查点的概念。

2、 增量检查点

oracle从8i开始引入了检查点队列这么一种概念,用于记录数据库里面当前所有的脏数据块的信息,dbwr根据这个队列而将脏数据块写入到数据文件中。检查点队列按时间先后记录着数据库里面脏数据块的信息,里面的条目包含rba(redo block address,重做日志里面用于标识检查点期间数据块在重做日志里面第一次发生更改的编号)和数据块的数据文件号和块号。在检查点期间不论数据块更改几次,它在检查点队列里面的位置始终保持不变,检查点队列也只会记录它最早的rba,从而保证最早更改的数据块能够尽快写入。当dbwr将检查点队列里面的脏数据块写入到数据文件后,检查点的位置也要相应地往后移,ckpt每三秒会在控制文件中记录检查点的位置,以表示instance recovery时开始恢复的日志条目,这个概念称为检查点的“心跳”(heartbeat)。检查点位置发生变更后,oracle里面通过4个参数用于控制检查点位置和最后的重做日志条目之间的距离。在这里面需要指出的是,多数人会将这4个参数看作控制增量检查点发生的时间。事实上这是错误的,这4个参数是用于控制检查点队列里面的条目数量,而不是控制检查点的发生。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么机顶盒搜索频道后不能保存,在搜索完成
黄大仙第33签,问姻缘。
水缘休闲浴场我想知道这个在什么地方
道德进步的主要表现是什么?
只为你昙花一现的意思
行政助理是做什么的?
石厂岗地址在什么地方,想过去办事
中国第一次水土流失普查是什么时候
国内在用心做菜的厨师有几个?
八角(大料)怎么煮才会更香??
德胜路跨铁立交桥我想知道这个在什么地方
解压密码怎么破解
无法相信日语怎么说
波士顿矩阵根据( )两项指标,将企业所有的战
第一次买iphone在官网买可以吗,想买个7
推荐资讯
为什么一有事王新就跑了,难道王新和那些人关
下列各句中,没有语病的一句是 [ ]
孩子不认真完成老师布置的作业 家长怎么看待?
图中能够反映的省际人口迁移状况是A. 迁入率
海陆演了哪些电影或电视剧
阿祥牛氏辈红山路店怎么去啊,有知道地址的么
成都西门到南湖梦幻岛怎么走?
衡阳腾飞内衣有限公司在哪里啊,我有事要去这
冬天的雪花在月光的照射下有时会像什么有事会
优秀都是自己逼出了,和别人毛关系也没有
女生什么词都用我身上 说明她把我当什么关系
柠檬&奶茶怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?