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,目前一般是256MB或者更大,同样是通过电池来保护的,不同于存储的是,这个电池并不保证数据可以被写入到磁盘上,而是为cache供电以保护数据不丢失,一般可以支撑几天的时间。还有些RAID卡上有flash cache,掉电后可以将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数据库,操作系统和存储子系统共同来保证的。
http://soft.zdnet.com.cn/techupdate/2010/0910/1881737.shtml
相关推荐
Oracle IO 问题解析是指 Oracle 数据库中读写操作对 IO 的影响,包括写操作和读操作。写操作包括控制文件的写入、用户数据的修改、Redo Log 的写入、Archive Log 的写入和临时表空间的写入等。这些写操作都是 ...
为了提高性能并减少磁盘I/O等待时间,Oracle采用了内存缓存机制,将频繁访问的数据缓存到Buffer Cache中。当数据块被修改后,即被标记为“脏”数据块。“脏”数据块最终会被DBWn进程(Database Writer Process)写...
### Oracle数据库日常维护手册知识点概览 #### 一、检查数据库基本状况 ##### 1.1 检查Oracle实例状态 - **SQL命令**: 使用`SELECT instance_name, host_name, startup_time, status, database_status FROM v$...
在Oracle数据库管理中,了解和优化IO(输入输出)使用情况是至关重要的,因为它直接影响到系统的性能和响应时间。标题提到的"oracle IO 使用情况"指的是监控和分析Oracle数据库在执行SQL语句时对磁盘I/O资源的消耗。...
- **SGA区参数统计:** SGA(共享全局区)是Oracle数据库中重要的内存区域,对其参数进行统计分析,有助于优化数据库性能。 - **表空间与用户检查:** 检查数据库表空间的使用情况以及用户的权限分配,确保数据的...
本书全面覆盖了Oracle数据库运维中的各个方面,包括但不限于性能监控、问题诊断、参数调优等。 #### 二、性能 ##### 2.1 Oracle - **2.1.1 AWR(自动工作负载资料库)** - AWR是Oracle提供的一个用于收集和存储...
Oracle IO 问题是数据库性能优化的重要方面,任何数据库系统中都存在大量的读写操作,IO 问题也往往是导致数据库性能问题的重要原因。以下是 Oracle IO 问题及性能调优的相关知识点: 控制文件 * 控制文件记录了...
在深入探讨Oracle数据库中的输入输出(IO)问题之前,我们首先要了解Oracle数据库的基本物理结构及其如何处理数据的读写操作。Oracle数据库的IO问题通常涉及读取和写入操作,其中写操作尤为重要,因为它直接影响到...
本文将详细探讨Oracle数据库性能优化的方法论,重点介绍Oracle Wait Interface (OWI)及其在性能分析中的应用。 OWI是Oracle数据库中用于识别性能瓶颈的重要工具,它通过提供对等待事件的量化分析,帮助管理员定位并...
- 查询`v$librarycache`表中的`namespace`, `gethitratio`, `pinhitratio`, `reloads`, `invalidations`字段,以评估图书馆缓存的性能。 其中,`gethitratio`是指`GETHITS / GETS`的比率,该比率应保持在90%以上...
4. **Buffer Cache**:缓存数据库块的内存区域,减少对物理I/O的依赖。 5. **redo log buffer**:用于暂存事务的更改信息,待写入重做日志文件。 6. **Direct Path Read (DPR)**:绕过Buffer Cache的直接读取方式...
Oracle数据库管理员笔试题涉及到多个方面的Oracle知识,涵盖了数据库架构、SGA与PGA、启动与关闭数据库、归档模式、数据导入导出、数据库监控、索引、分区表、Linux系统管理、存储过程、异常处理、操作系统命令、表...
在2013年举办的第四届中国数据库技术大会上,阿里巴巴集团分享了其数据库的关键技术实践,涉及了数据库架构、性能优化、高可用解决方案等多个方面。以下将详细介绍这些关键技术点: 1. 阿里巴巴数据库团队简介 张瑞...
在解决Oracle数据库性能下降的问题时,首先需要对各种性能指标进行深入分析。在这个案例中,客户反映数据库响应时间显著增加,应用性能下降了4-5倍。以下是对给出的statspack报告和iostat输出的解析,以找出可能的...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储和处理中扮演着重要角色。在Oracle系统中,I/O(输入/输出)性能对于系统的整体效率至关重要。Oracle I/O涉及到数据的读取、写入以及缓存...