可能大家会问,oracle和HDFS属于不同场景的存储系统,它们之间为什么会有联系呢?确实,从技术本身来看,他们确实无关联,但利用“整体学习”的思想,跳出技术本身,可以发现Oracle的缓冲区和HDFS的edit logs都是为了解决频繁IO而出现的,可以解决因频繁读写磁盘而导致性能低的问题。如下图所示:

一、Oracle的缓冲区机制

Oracle的缓冲区主要有两种:数据库缓冲区缓存(data buffer cache,后面简称DB chche)和日志缓冲区(redo log)(对oracle实例内存结构感兴趣的同学可自行百度,此处不再过多介绍)。

1.数据库缓冲区缓存(DB Cache)

DB Cache是执行SQL的工作区域,用户会话所有操作数据都是在此缓存中进行,而不是直接操作磁盘。举例来说,当执行select操作时,会先查找DB Cache,如果找到,则直接返回,如果未找到,会再从磁盘加载数据到DB Cache中来,然后再返回。再举个例子,当执行update操作时,其实也只是更新了DB Cache中的数据。如果DB Cache中数据和磁盘中数据不一致,则称此数据为脏数据。

那么DB Cache的脏数据往磁盘中写入的机制是怎样的呢?Oracle中为此专门有一个数据库写入器的后台进程DBWn,会把DB Cache中的数据写入到磁盘中,当出现以下情况之一时,DBWn会执行写入磁盘操作:

1)没有任何可用DB Cache;

2)脏数据过多;

3)到达3秒的超时时间;

4)遇到checkpoint;

可以看到,DBWn这样写入方式是极懒的,目的就是为了减少IO。

2.日志缓冲区

日志缓冲区是一块小的内存区域,用于存储重做日志文件中的变更向量。当数据库出现故障,导致大量脏数据未来得及写入磁盘时,会根据重做日志文件进行恢复(注意:重做redo和撤销undo是有区别的,不要混淆)。与DBWn一样,重做日志缓冲区也有专门的后台进程LGWR,进行磁盘的写入操作,写入的时机有以下几种情况:

1)commit操作(注意此commit,执行的是重做日志的写入磁盘操作,而不是DB Cache的写入磁盘操作);

2)日志缓冲区已用超过1/3;

3)DBWn要写入脏数据(可以想想为什么要这样?原因就在于DBWn可能会将未提交的事务数据写入到磁盘,为了保证这些已写入磁盘的数据可以进行回滚,所以必须也要把对应的重做日志也写入到磁盘中去,其实就是为了事务回滚用的);

综上,这两类缓冲区都是为了最大限度的减少IO而出现的机制。

二、HDFS的edit logs

熟悉HDFS namenode启动过程的同学们应该知道,在HDFS namenode启动时,会把fsimage和edit logs加载到namenode的内存中,当namenode需要重启时,会先把内存中的fsimage与edit logs合并写入磁盘后,再重复执行上面的操作(此处edit logs可以认为是namenode的缓冲区,类似于oracle的缓冲区,只是一般不会轻易写磁盘)。因此就会面临如下的问题:

1)当edit logs文件很大时,则namenode的重启时间会过长;

2)当namenode意外挂掉时,则eidt logs会丢失很多改动;

此时,Secondary namenode就出现了,可以通过定时查询edit logs,然后将edit logs更新到fsimage,再由secondary namenode将更新后的fsimage写入到namenode磁盘,以便下次重启时使用。当然随着Hadoop 2.0以后HA的出现,secondary namenode也被其它HA方案替代了,后面有机会再深入介绍。

综上,oracle的缓冲区与hdfs中的edit logs类似,都是为了防止IO影响性能而出现的,只是写入磁盘的机制不同,但思想可以认为是一致的。

关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考的更多相关文章

  1. HDFS中NameNode管理元数据机制

    NameNode职责 响应客户端请求 维护目录树 管理元数据(查询,修改) HDFS元数据存储 内存中有一份完整的元数据(特定数据结构) 磁盘有一个“准完整”的元数据的镜像文件 当客户端对HDFS中的 ...

  2. Oracle Redo Log 机制 小结(转载)

    Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...

  3. 2014年2月5日 Oracle ORACLE的工作机制[转]

      网上看到一篇描写ORACLE工作机制的文章,觉得很不错!特摘录了下来.   ORACLE的工作机制-1 (by xyf_tck) 我们从一个用户请求开始讲,ORACLE的简要的工作机制是怎样的,首 ...

  4. Linux0.11内核--缓冲区机制大致分析

    文件系统的文件太多,而且是照搬的MINIX的文件系统,不想继续分析下去了.缓冲区机制和文件系统密切相关,所以这里就简单分析一下缓冲区机制. buffer.c 程序用于对高速缓冲区(池)进行操作和管理. ...

  5. Android核心分析之二十五Android GDI之共享缓冲区机制

    Androird GDI之共享缓冲区机制 1  native_handle_t对private_handle_t 的包裹     private_handle_t是gralloc.so使用的本地缓冲区 ...

  6. 【Hadoop学习】HDFS中的集中化缓存管理

    Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...

  7. oracle的resetlogs机制浅析

    oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?它的原理 ...

  8. hadoop学习;大数据集在HDFS中存为单个文件;安装linux下eclipse出错解决;查看.class文件插件

    sudo apt-get install eclipse 安装后打开eclipse,提示出错 An error has occurred. See the log file /home/pengeor ...

  9. 使用sqoop往hdfs中导入数据供hive使用

    sqoop import -fs hdfs://x.x.x.x:8020 -jt local --connect "jdbc:oracle:thin:@x.x.x.x:1521:testdb ...

随机推荐

  1. AIX 补丁升级

    下载地址:http://www-933.ibm.com/support/fixcentral 1.root登陆系统: 2.对系统进行备份或者克隆(见上一篇抄袭IBM官方文档的文章): 3.官方建议为/ ...

  2. eclipse环境搭建(插件安装)

    转自:http://www.iteye.com/topic/982182 使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指导,专门讲解了一下Eclips ...

  3. JSP动作元素<jsp:include>和<jsp:param>的搭配使用

    最近开发项目中广告头的优化:引入了<jsp:include page="XX.jsp"></jsp:include> 当<jsp:include> ...

  4. HDU2732一个让我debug了一晚上的题目

    思路都理解了,清晰了,就是代码不对,还是有些小地方自己注意不到,即使就在你的眼前也不易发现的那种 Description: 也是一个最大流的构图,没相出来,或者说想简单了也是标记点1 至 n * m是 ...

  5. 最大m段子段和

    hdu1024 最大m子序列和 给定你一个序列,让你求取m个子段(不想交的子段)并求取这m个子段和的最大值 从二维开始来看dp[i][j]表示取第j个数作为第i个子段的元素所得到的前i个子段和的最大值 ...

  6. python函数知识

    一.三目运算 也叫三元运算,例如result=x if x<y else y 二.集合(set) 返回主页集合(set):把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(s ...

  7. html5 实现qq聊天的气泡效果

    教程:http://m.blog.csdn.net/blog/yhc13429826359/38778337 写的很好.自己实现的时候,由于img float:left,会脱离文档流,导致结构混乱. ...

  8. js-列表修改

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  9. 本地Git与github连接/上传配置

    参照:http://www.runoob.com/w3cnote/git-guide.html 一.本地与githup连接配置1.本地创建ssh key: $ ssh-keygen -t rsa -C ...

  10. vlookup返回多个结果

    http://www.360doc.com/content/12/1021/15/7665211_242782107.shtml =IFERROR(VLOOKUP(D2&ROW(A1),IF( ...