`
nesta2001zhang
  • 浏览: 69290 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DBWn基础

 
阅读更多

DBWn基础

Database Writer (DBWn):

根据图片我们就可以知道DBWn是一个负责把database buffer cache里的数据写入到disk的进程。

目 前为止我们其实已经介绍了很多和DBWn有关的东西。我们知道database管理数据的最小单位是data block,我们知道data block是一组OS block的集合,OS block构成了datafile,其实也就是data block组成了datafile,我们知道一个或多个datafile称为一个tablespace,在tablespace里我们每建立一张表就申请 了一个segment,当一个segment需要新的空间就添加一个extent,而一个extent就是一组连续的data block。

我 们还知道SGA中有一个内存区域叫Database buffer cache,他通过把最常用的block缓存起来,希望能够被其他的用户重(chong)用,以提高性能。我们也提过buffer cache不仅是一个读入的缓存区也是一个写入的缓存区,当用户修改一个block的时候,用户只是在buffer cache里进行了修改。我们唯一没有介绍的就是Oracle是如何把buffer cache里面被修改过的数据写入到datafile里面的。------这就是DBWn唯一需要做的工作。

DBWn < ------ > DataBase Writer n,如果你只配置一个DBWR进程,n就是0,Oracle允许你设置多达20个DBWR进程(DBW0 . . . DBW9, DBWa . . . DBWj),这个后台进程唯一的作用就是把buffer cache中的修改过的数据写入到磁盘。让我们举个例子:
1. 我要在我的表中查找name是以‘Li’开头的纪录,于是我运行:select name from sometable where name like ‘Li%’;
2. 首先Oracle检查我需要的数据block在不在buffer cache中,如果不在,则从disk把相应的block读入buffer cache。并且返回我的查询结果。
3. 我发现返回的结果是“Lii, Xinyu”,多了一个字母i,于是执行update sometable set name=‘Li, Xinyu’ where name=‘Lii, Xinyu’;
4. Oracle在内存里修改了block的内容,这时候这个block变成‘dirty’的。
5. 我输入commit; 这时候Oracle把我的这个事务相关redo信息写入磁盘-----我们很快就会涉及这部分的细节。
6. 包含name=‘Li, Xinyu’的block就留在cache里并可以被后续的用户访问,同时等待DBWn进程在需要的时候把它写入到disk。

那么,DBWn什么时候被触发呢?我们的slide上列出了很多种可能,但以下两种是最重要的:
• Checkpoint的时候
• 当我们在buffer cache中没有足够的free buffer的时候。
• 通过把数据先在cache中修改,并由DBWn后台进程在必要或方便的时候把数据写入到磁盘,可以明显提高用户修改数据的性能,因为对用户而言,当数据在内存被修改后,用户的操作就已经完成了,其他的工作由Oracle的后台进程们来保证。
• 你应该可以理解,当buffer cache中没有足够的free buffer的时候,Oracle需要从disk读取新的数据并覆盖当前buffer cache中一些block,这时候需要触发DBWn进程,因为对于dirty block你必须先把它写入disk,才能重用它所占用的buffer。

那么如果我们有足 够的free buffer,那我们还需不需要触发DBWn呢?因为如果总是把数据放在内存中,当你的server突然关机,你将会丢失所有内存中的数据!尽管 Oracle的redo log和LGWR后台进程可以保证我们有足够的redo信息来恢复你丢失的数据,但如果需要恢复的数据太多,这个恢复的过程也是比较漫长的,所以 Oracle会定期执行一个叫做checkpoint操作,这个checkpoint操作就会通知DBWn把buffer cache中的Dirty数据写入磁盘。

分享到:
评论

相关推荐

    oracle 10G常见进程

    oracle10g常见的一些进程,如DBWn,LGWR、SMON、PMON、RECO和ARCn等,主要是官方文档的译文,能力有限,翻译的不好,仅供借鉴,如果发现文档中出现什么问题还希望能帮忙指正,谢谢!

    软件学院ORACLE数据库课程习题

    软件学院数据库课程习题 ...(A) DBWn (B) LGWR (C) SMON (D) PMON (E) ARCn 52 哪一个表空间不能切换为脱机状态( ) (A) 临时表空间TEMP (B) 用户表空间USER (C) 索引表空间INDEX (D) 系统表空间SYSTEM

    ORACLE实例的后台进程

    系统检测器(System Monitor,SMON)、进程监视器(Process Monitor,PMON)、数据库写入器(Database Writer,DBWn)、日志写入器(Log Writer,LGWR)、检查点进程(Checkpoint Process,CKPT) 1、SMON:安装和打开...

    深入解析Oracle.DBA入门进阶与诊断案例

    7.8.4 在DBWn写之前 315 7.9 Redo Log Buffer的大小设置 316 7.10 commit做了什么? 317 7.11 日志的状态 318 7.12 日志的块大小 321 7.13 日志文件的大小 322 7.14 如何调整日志文件大小 324 7.15 为...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    1.5.3 DBWn 24 1.5.4 LGWR 26 1.5.5 CKPT 27 1.5.6 MMON 27 1.5.7 MMNL 28 1.5.8 MMAN 28 1.5.9 ARCn 28 1.5.10 RECO 29 1.5.11 其他一些后台进程 29 1.6 数据库存储结构 32 1.6.1 物理数据库结构 32 ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    1.5.3 DBWn 24 1.5.4 LGWR 26 1.5.5 CKPT 27 1.5.6 MMON 27 1.5.7 MMNL 28 1.5.8 MMAN 28 1.5.9 ARCn 28 1.5.10 RECO 29 1.5.11 其他一些后台进程 29 1.6 数据库存储结构 32 1.6.1 物理数据库结构 32 ...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    1-14 数据库缓冲区 1-15 重做日志缓冲区 1-18 大储存池 1-19 JAVA 池 1-20 程序全局区(PGA) 1-21 进程结构 1-22 用户进程 1-23 服务进程 1-24 后台进程 1-25 数据库写进程(DBWn) 1-26 日志写进程(LGWR) 1-27 ...

    Oracle9i的init.ora参数中文说明

    对于二进制排序, ORDER BY 查询的比较顺序是以数值为基础的。对于语言排序, 则需要进行全表扫描, 以便将数据按照所定义的语言排序进行整理。 值范围: BINARY 或有效的语言定义名。 默认值: 从 NLS_LANGUAGE 中获得...

Global site tag (gtag.js) - Google Analytics