Cache 和 Buffer 有什么区别
转载 :talkwithtrend : https://mp.weixin.qq.com/s/YsEOBVS7fXgrGXnXH1I0MQ

Cache和Buffer简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一称为cache。

Oracle中的log buffer是解决redo写入的问题,而data buffer cache则解决data block的读写问题。对于Oracle来说,如果IO没有在SGA中命中,都会发生物理IO,Oracle并不关心底层存储的类型,可能是一套存储系统,可能是本地磁盘,可能是RAID 10,也可能是RAID 5,可能是文件系统,也可能是裸设备,或是ASM。总之,Oracle把底层的存储系统称为存储子系统。

在存储系统中,cache几乎无处不在(在后面的论述中,我们统称为cache),文件系统有cache,存储有cache,RAID控制器上有cache,磁盘上也有cache。为了提高性能,Oracle的一个写操作,很有可能写在存储的cache上就返回了,如果这时存储系统发生问题,Oracle如何来保证数据一致性的问题。

Oracle数据库最重要的特性是:Write ahead logging,在data block在写入前,必须保证首先写入redo log,在事务commit时,同时必须保证redo log被写入。Oracle为了保证数据的一致性,对于redo log采用了direct IO,Direct IO会跳过了OS上文件系统的cache这一层。但是,OS管不了存储这一层,虽然跳过了文件系统的cache,但是依然可能写在存储的cache上。

一般的存储都有cache,为了提高性能,写操作在cache上完成就返回给OS了,我们称这种写操作为write back,为了保证掉电时cache中的内容不会丢失,存储都有电池保护,这些电池可以供存储在掉电后工作一定时间,保证cache中的数据被刷入磁盘,不会丢失。不同于UPS,电池能够支撑的时间很短,一般都在30分钟以内,只要保证cache中的数据被写入就可以了。存储可以关闭写cache,这时所有的写操作必须写入到磁盘才返回,我们称这种写操作为write throuogh,当存储发现某些部件不正常时,存储会自动关闭写cache,这时写性能会下降。

RAID卡上也有cache,一般是256M,同样是通过电池来保护的,不同于存储的是,这个电池并不保证数据可以被写入到磁盘上,而是为cache供电以保护数据不丢失,一般可以支撑几天的时间。还有些RAID卡上有flash cache,掉电后可以将cache中的内容写入到flash cache中,保证数据不丢失。如果你的数据库没有存储,而是放在普通PC机的本地硬盘之上的,一定要确认主机中的RAID卡是否有电池,很多硬件提供商默认是不配置电池的。当然,RAID卡上的cache同样可以选择关闭。

磁盘上的cache,一般是16M-64M,很多存储厂商都明确表示,存储中磁盘的cache是禁用的,这也是可以理解的,为了保证数据可靠性,而存储本身又提供了非常大的cache,相比较而言,磁盘上的cache就不再那么重要。SCSI指令中有一个FUA(Force Unit Access)的参数,设置这个参数时,写操作必须在磁盘上完成才可以返回,相当于禁用了磁盘的写cache。虽然没有查证到资料,但是我个人认为一旦磁盘被接入到RAID控制器中,写cache就会被禁用,这也是为了数据可靠性的考虑,我相信存储厂商应该会考虑这个问题。

至此,我们可以看到Oracle的一个物理IO是经历了一系列的cache之后,最终被写入到磁盘上。cache虽然可以提高性能,但是也要考虑掉电保护的问题。关于数据的一致性,是由Oracle数据库,操作系统和存储子系统共同来保证的。

Cache 和 Buffer 有什么区别相关推荐

  1. Cache 和 Buffer 有什么区别?

    Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的 ...

  2. mysql中的cache和buffer_mysql Cache和Buffer区别有哪些?

    mysql Cache和Buffer区别有: Buffer的核心作用是用来缓冲,缓和冲击.比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛.用个buffer ...

  3. Cache 和 Buffer 都是缓存,主要区别是什么?

    链接地址:https://www.zhihu.com/question/26190832 作者:知乎用户 链接:https://www.zhihu.com/question/26190832/answ ...

  4. 缓存与缓冲的区别 Difference Between Cache and Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Cache vs Buffer Both cache and buffer are temporary storage are ...

  5. 萌新扫盲3—Cache还是Buffer?区别何在

    要问Cache和Buffer的区别,首先要问另一个问题:为何会存在Cache和Buffer? 为了提速. 从功能上看,PC挺简单的,就是"输入输出"设备:参数输入进设备(比如鼠标点 ...

  6. Linux系统中的Page cache和Buffer cache

    Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...

  7. Linux 操作系统原理 — 内存 — Cache 和 Buffer

    目录 文章目录 目录 无处不在的 Cache Cache 和 Buffer 的区别在哪里? 为什么需要缓存? Linux 的缓存机制 Page Cache 的同步机制(一致性问题) 无处不在的 Cac ...

  8. linux cache and buffer【转】

    转自:http://blog.csdn.net/turkeyzhou/article/details/6426738 版权声明:本文为博主原创文章,未经博主允许不得转载. Linux下对文件的访问和设 ...

  9. Linux Free命令与cache和buffer的主要区别

    本文是转载的,不知道为啥不能直接转载到51,所以copy了下,原文地址是: http://blog.sina.com.cn/s/blog_7a1285bb0100ziep.html free 命令相对 ...

最新文章

  1. 【收藏】华为路由器交换机配置命令大全
  2. Spring Boot——WebMvcConfigurerAdapter已过时解决方案
  3. SQL2005 express升级到2008企业版解决4096限制问题
  4. Spring Boot Admin的使用
  5. ES6 (总结篇二)
  6. 中国癌症大数据出来了!每年126万例癌症死亡本可避免
  7. Network POJ-3694
  8. windows和Linux利用Python快速搭建一个网站
  9. HDU 2208 唉,可爱的小朋友(DFS)
  10. oracle cloud认证费用,ORACLE Cloud 创建实例费用提问
  11. 本地计算机 策略在哪xp系统,本地组策略编辑器在哪 打开组策略管理器方法
  12. java 用redis如何处理电商平台,秒杀、抢购超卖
  13. java 登陆邮箱_java如何登陆163邮箱,获取登陆用户的好友列表(1)
  14. 实现Excel单元格中的下拉选项和数据有效性
  15. linux无法添加网络连接到服务器地址,ubuntu9.1服务器版局域网IP设置 网络无法连接(急)...
  16. 哈工大计算机学院博士毕业 要求,哈尔滨工业大学博士毕业要求.doc
  17. android 录音获取分贝变化,Android录音时获取分贝值的方法代码实例
  18. 流媒体之DirectShow——视频采集
  19. 撒旦的诡计------网络游戏
  20. android 客户端的授权,如何ROOT安卓设备并授权向日葵客户端(电脑端)

热门文章

  1. python优雅编程_Python——traceback的优雅处理
  2. execjs._exceptions.ProgramError: TypeError: ‘JSON‘ 未定义
  3. Android Binder通信机制
  4. Windows 8 Directx 开发学习笔记(十二)利用混合实现浮在水面的木箱
  5. [转载]Qt之模型/视图(自定义风格)
  6. Win7系统经常报错怎样解决?
  7. java B2B2C Springboot电子商城系统-路由网关(zuul)
  8. 内存数据集产生的隐性成本
  9. 初识SpringSecurity
  10. 030_磁盘调度策略比较