Cache和Buffer是两个不同的概念,简单的说,Cache是加速ldquo;读rdquo;,而buffer是缓冲ldquo;写rdquo;,前者解决读的问题,

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体系结构里面会出现缓存的地方:

1、oracle缓存(包括PGA/SGA);

2、OS缓存(其实这个一直都有点歧义,我个人感觉应该是说文件系统的缓存,所以说如果是裸设备的话就会没有OS缓存这个说法);

3、存储缓存;

4、硬盘缓存;(如果使用的是存储,硬盘缓存通常都是关掉的。存储的电池,一般只保护存储CACHE,不对硬盘缓存提供保护。如果没使用存储,我们之前的做法,是禁掉硬盘缓存。)

5、cpu一二级缓存。

Oracle的Buffer Cache和操作系统的Cache Buffer谁更有效率。其实无论谁,都很有效率,但为什么通常建议绕过OS 文件系统的CACHE呢,这是因为数据库的Buffer Cache是针对数据库设计的,OS 文件系统层CACHE是通用型的,所以在有些情况下,OS层CACHE不如Oracle Buffer Cache表现更好。

一般读流程:

CPU------一二级缓存(如有)-----SGA-----OS(如有)------存储coache-----硬盘coache------存储物理

一般写写流程:

CPU-----SGA-----存储coache-----存储物理

相关CACHE L1、L2 CACHE的,在Oracle中不必关心,因为无法观察。如果对这一块感兴趣,推荐一本书《深入理解计算机系统》,有比较详细的CPU 一、二级CACHE原理。还有就是,硬盘CACHE大部分是关闭的,如果没关,建议关闭,否则有可能丢失数据。

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

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

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

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

本文根据网络资料整理

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

oracle读写mysql_Oracle读写磁盘经过的缓存相关推荐

  1. 无盘服务器读写缓存,无盘系统中实现网络磁盘本地写缓存控制的方法

    1. 一种无盘系统中实现网络磁盘本地写缓存控制的方法,所述的无盘系统中包括通过 网络与远程服务器相连接的客户端,其特征在于,所述的方法包括以下步骤:(1)客户端进行启动和初始化操作:(2)客户端根据服 ...

  2. 苹果电脑如何读写ntfs格式磁盘

    2019独角兽企业重金招聘Python工程师标准>>> 现在使用苹果电脑的小伙伴越来越多,很多用户发现我们的苹果电脑不能直接读写ntfs格式的移动硬盘,那么Mac怎么读写NTFS格式 ...

  3. Arduino 控制RFID读写器读写 IC卡

    Arduino 控制RFID读写器读写 IC卡 一.IC卡的认识   IC卡可以通过频段进行划分,低频(125KHz~134kHz,典型工作频率是12KHz).高频(13.56MHz)和超高频(860 ...

  4. oracle asm spfile丢失,Oracle 11g RAC ASM磁盘全部丢失后的恢复

    Oracle 11g RAC ASM磁盘全部丢失后的恢复,Oracle 11.2.0.3 RAC ON Oracle Linux 6 x86_64,只有一个ASM外部冗余磁盘组mdash;m 一.环境 ...

  5. c语言读写nfc,Android NFC M1卡读写芯片卡读写(CPU卡读写)(RFID读写)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/sgn5200/article/deta ...

  6. 用python的pandas打开csv文件_python读写数据读写csv文件(pandas用法)

    python中数据处理是比较方便的,经常用的就是读写文件,提取数据等,本博客主要介绍其中的一些用法.Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用 ...

  7. win10文件服务器ssd当缓存盘,为磁盘启用写入缓存,提升Win10系统性能

    在CPU.内存性能过剩的今天,电脑配置的瓶颈已是硬盘,升级SSD固态硬盘能显著提升系统性能.那么如果你还没能用上固态硬盘,其实一个简单的磁盘设置依然能有效提升系统性能的,那就是为磁盘启用写入缓存策略( ...

  8. 【DB笔试面试611】在Oracle中,什么是结果集缓存?

    ♣题目 部分 在Oracle中,什么是结果集缓存? ♣答案部分 结果集缓存(Result Cache)是Oracle 11g的新特性,用于存储经常使用的SQL语句和函数的查询结果.当相同语句再次执行的 ...

  9. 案例:Oracle报错ASM磁盘组不存在或没有mount

    案例:Oracle报错ASM磁盘组不存在或没有mount 环境:RHEL 6.5 + Oracle Standby RAC 11.2.0.4 我做Standby RAC实验时,在恢复控制文件时,报错无 ...

  10. oracle 查询数据库io,查看Oracle数据文件和磁盘i/o情况

    查看Oracle数据文件和磁盘i/o情况 --查询当前用户使用了多少还原表空间 select d.username,c.name,b.writes from v$transaction a,v$rol ...

最新文章

  1. 了解jvm对编程的帮助_这是您对社会责任编程的了解
  2. wpf richtextbox 存储到数据库并显示
  3. 28岁自学python来得及吗_我28岁了,还能成为一名程序员吗?迷茫和沮丧中
  4. python settings模块安装_Python settings-helper包_程序模块 - PyPI - Python中文网
  5. [蓝桥杯2018决赛]换零钞-枚举
  6. go 链路追踪_使用opentracing,jaeger实现golang链路追踪
  7. 数字证书转换cer---pem
  8. OpenCv图像像素操作
  9. Websense:别让移动设备触痛企业的安全神经
  10. AD9在PCB中放大元件后,元件表面出现网格
  11. Oracle自定义函数实现动态参数复制表(使用了自定义type以及pipelined)
  12. 线程死锁 导致 服务器cpu负载过高
  13. java实验报告6:异常处理程序设计
  14. UI设计中一致性为什么这么重要
  15. html中如何插入pdf文件,如何创建PDF文件
  16. Report中的Drill down
  17. Vue学习记录-路由
  18. SQL注入学习之特殊符号(三)
  19. 七牛云配置token-----CryptoJS.js
  20. 小米手机升级MIUI11后,要记得关闭这4个按钮,不然电池就会不耐用

热门文章

  1. 获得CPU利用率(python调用top命令实现)
  2. 学习 TList 类的实现[1]
  3. 二级域名共享cookies
  4. 关于《Delphi源代码分析》的讨论
  5. 坐标系旋转前后坐标的变化
  6. 第10章 评价分类结果 学习笔记下
  7. 每日一句20191104
  8. 181219每日一句
  9. Atitit work remote solu 远程办公解决方案 Atitit6 远程办公四件套 目录 1. Ati标准四件套 2 1.1. Gmail Google 日历和 2 1.2.
  10. AAtitit.随时间变色特效 ---包厢管理系统的规划titit.随