DBWR进程:
该进程执行将缓冲区写入数据文件,是负责管理缓冲区的一个oracle后台进程,当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务就是将“弄脏”的缓冲区写入磁盘,是缓冲区保持“干净”,当“弄脏”很多时,未使用的缓冲区将会减少,以致用户进程将块从磁盘读入内存时就会找不到可用的缓冲区,DBWR将管理缓冲存储区,使用户进程总是得到未用的缓冲区。
ORACLE采用LRU算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。
DBWR工作情况:
1、当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度
时,该服务进程将通知DBWR进行写。该临界长度是为参数DB-BLOCK-WRITE-BATCH
的值的一半
2、当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没
有查到未用的缓冲区,它停止查找并通知DBWR进行写。 (找不到地方时)
3、出现一定时间,时间自设,DBWR将通知本身
4、当出现检查点时,DBWR将通知本身。
5、当脏缓冲区的数量超过了所设定的限额
6、当某个表被drop或者truncate时
7、当表空间设为only时
8、alter tablespace 名称 begin backup;
在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数
DB-BLOCK-WRITE-BATCH所指定。如果弄脏表中没有该参数指定块数的缓冲区,DB
WR从LUR表中查找另外一个弄脏缓冲区。
如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目
的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新
的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BAT
CH的值的二倍。如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。
在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。DBWR将指定的缓冲
区写入磁盘。
在有些平台上,一个实例可有多个DBWR。在这样的实例中,一些块可写入一磁盘
,另一些块可写入其它磁盘。参数DB-WRITERS控制DBWR进程个数。
LGWR工作情况:
1、commit
2、每3s
3、当日志缓冲区的1/3已满时
4、在DBWR写之前
5、超过1M时
LGWR进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或
不可用,LGWR 可继续地写入该组的其它文件。
日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,
服务器进程可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日
志缓冲区总有空间可写入新的日志项。
注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写
出,而这些日志项仅当在以后事务提交后才永久化。
ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入
日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入
数据文件。当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一
起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢
复操作可以同步。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24500180/viewspace-713182/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24500180/viewspace-713182/