关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考
可能大家会问,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的某些关联性的思考的更多相关文章
- HDFS中NameNode管理元数据机制
NameNode职责 响应客户端请求 维护目录树 管理元数据(查询,修改) HDFS元数据存储 内存中有一份完整的元数据(特定数据结构) 磁盘有一个“准完整”的元数据的镜像文件 当客户端对HDFS中的 ...
- Oracle Redo Log 机制 小结(转载)
Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...
- 2014年2月5日 Oracle ORACLE的工作机制[转]
网上看到一篇描写ORACLE工作机制的文章,觉得很不错!特摘录了下来. ORACLE的工作机制-1 (by xyf_tck) 我们从一个用户请求开始讲,ORACLE的简要的工作机制是怎样的,首 ...
- Linux0.11内核--缓冲区机制大致分析
文件系统的文件太多,而且是照搬的MINIX的文件系统,不想继续分析下去了.缓冲区机制和文件系统密切相关,所以这里就简单分析一下缓冲区机制. buffer.c 程序用于对高速缓冲区(池)进行操作和管理. ...
- Android核心分析之二十五Android GDI之共享缓冲区机制
Androird GDI之共享缓冲区机制 1 native_handle_t对private_handle_t 的包裹 private_handle_t是gralloc.so使用的本地缓冲区 ...
- 【Hadoop学习】HDFS中的集中化缓存管理
Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...
- oracle的resetlogs机制浅析
oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?它的原理 ...
- hadoop学习;大数据集在HDFS中存为单个文件;安装linux下eclipse出错解决;查看.class文件插件
sudo apt-get install eclipse 安装后打开eclipse,提示出错 An error has occurred. See the log file /home/pengeor ...
- 使用sqoop往hdfs中导入数据供hive使用
sqoop import -fs hdfs://x.x.x.x:8020 -jt local --connect "jdbc:oracle:thin:@x.x.x.x:1521:testdb ...
随机推荐
- Android自定义视图一:扩展现有的视图,添加新的XML属性
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- _ZSkill_快捷键_Xcode快捷键
Xcode 快捷键使用 Command 用来导航,控制导航区域 Alt 控制右边的部分. 如Assistant Editor ,utility editor. Control 编辑区域上的jump b ...
- POJ2456--Aggressive cows(Binary Search) unsolved
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- Hdu1205 吃糖果 2017-06-29 14:26 24人阅读 评论(0) 收藏
吃糖果 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另 ...
- 二分图学习——基础dfs判断二分图
#include <iostream> #include <cstdio> #include <string.h> #include <vector> ...
- windows安装mysql 5.7
1.下载mysql 5.7 压缩包,解压在D:\software\mysql\目录下,更名称mysql-5.7.22 ,并新建data空文件夹和my.ini文件 my.ini文件的内容 [client ...
- Alpha阶段scrum meeting七天冲刺博客-天冷记得穿秋裤队
Alpha阶段scrum meeting七天冲刺博客 day url 第一天 https://www.cnblogs.com/laomiXD/articles/9874052.html 第二天 htt ...
- Android-Java单例模式
今天我们来说说一个非常常用的模式,单例模式,单例模式让某个类中有自己的实例,而且只实例化一次,避免重复实例化,单例模式让某个类提供了全局唯一访问点,如果某个类被其他对象频繁使用,就可以考虑单例模式,以 ...
- iOS4.0及以上系统,关闭程序,applicationWillTerminate为调用问题解决
iOS4.0以后系统支持多任务类型,程序按下home键后,程序进入后台运行,如果内存不足被系统关闭或者手动关闭,都不会调用applicationWillTerminate回调函数. 解决方法:可以在程 ...
- C#通过字符串名称来调用对应字符串名称的方法
前段时间在一个项目中,在一个地方要将函数所在类中的方法都调用一遍,但是否调用要通过配置文件中的内容决定.所以为了减少代码量,在网上查了相关信息,终于成功的将其应用到了项目中,我在这里将我做的一个简单例 ...