Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1208162
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-25 11:29:33

即使是现在,不少的资料或教材上还明明白白的写着诸如:为提高磁盘性能,为保护数据文件,为......不要将Data file,Online Redo,Control file等等放到同一个盘符下这类描述。其初衷是好的,由于过去多是直接访问单个独立硬盘,将数据文件,日志文件等指向不同盘符,可以在一定程序上达到平衡IO的目的,但在技术/容量飞速发展的今天,还用这样的形容会让一些刚接触oracle的朋友感到困惑。

就当前我们所处的环境,不要说大型服务器都有独立存储,甚至是普通的家用PC都开始应用越来越普及的RAID技术来实现增速扩容的目的,由于raid具有自动平衡IO的能力,并且其对前台操作者是完全透明的,在这种情况下,实际上分不分盘符对效率已经没有太大影响(RAID自己就给均衡了,就算你再手工指向不同盘符或路径,但具体数据会存储在哪块磁盘上,也不是你能够决定的了)。

但是,并非说采用RAID就万事大吉,提到这里,我们有必要再来回顾一下RAID的相关技术,我们都知道,不同RAID级别实现的方式都是不同的,最常见的有:

RAID 0:其原理是将数据分散到多个磁盘上存取,专业术语形容叫条带(striping),由于其写入是同时向多块磁盘的并行操作,因此其写性能是最高的,不过,缺点也很明显,由于RAID 0不具备冗余的特性,因此一旦组成RAID 0的磁盘阵中有任意一块磁盘损坏,则所有数据都可能丢失。

RAID 1:专业术语形容叫镜像(mirroring),原理是一份数据同时写向两块硬盘(这两块磁盘被称为一个磁盘对,反映到前台应用则是一块盘),即使损坏一块磁盘也没有关系,因此安全性很高。缺点也同样明显,RAID 1空间利用率低,有效空间只有总存储容量的一半,而且写性能也并无提升。不过正是由于镜像的原因,RAID 1的读性能表现非常出众,如果原始数据比较繁忙时,甚至镜像盘也能够提供读服务。

RAID 5:曾经流行过,曾几何时不再流行,而今又开始流行。在磁盘昂贵的年代RAID 5是一种很好的解决方式,相对低廉的组建成本下提供了不错的读写性能,冗余保护功能而且还没有像RAID 1那样夸张的空间浪费。其实现原理也是数据分散存储,以数据的校验位来确保数据安全,但不指定校验用的奇偶盘,而是将校验位交互存储于各个磁盘,在写入时通过奇偶校验来确定应该向何处写。正所谓成也萧何败也萧何啊,正是由于奇偶校验值它不需要牺牲一半的存储空间来提供冗余保护,也正是由于奇偶校验值它不得不在读写操作或者磁盘恢复时进行大量计算,为了实现冗余保护,每一次写操作,将产生四个实际的读/写操作, 其中两次读旧的数据及奇偶信息, 两次写新的数据及奇偶信息,这种写迭代对写性能的影响是具大的(注:曾经!!!目前而言,大型存储对于RAID5有专门优化,比如大量cache的应用能够将校验在之前就完成,最终写入速度还是非常理想的,不过,对于使用RAID卡或主析上集成RAID芯片的朋友,黑黑,还是需要考虑迭代写的影响)。

RAID 0+1(或者RAID 1+0,也被称为RAID 10):关于这两个,大家如果已经熟知了RAID 0和RAID 1,那从最简单的字面意义来理解RAID 0+1(RAID 1+0)就o了。0+1和1+0之间的区别无非是先条带再镜像,或是先镜像再条带,从应用的角度没有区别,但从维护的角度还是有影响的,具体有哪些影响,我们还是要从RAID 0和RAID 1的特性开说,RAID 0我们都知道,损坏一块盘则整个RAID崩溃,而对于RAID 1所有数据都有完整冗余。

举个例子,如果说我们有a,b,c,d四块盘做RAID 0+1,a+b组织一个RAID 0,c+d组成一个RAID 0,然后两个RAID 0再做成一个RAID 1,如果a,b,c,d中任意一块盘损坏,比如b,则a+b组成的RAID 0就失效了,这时候如果c,d中再有任意一块盘损坏,整个RAID 0+1都会失效。

如果a,b,c,d四块盘做成RAID 10,a+b组成一个RAID 1,c+d组成一个RAID 1,然后两个RAID 1再做成RAID 0,如果四块盘任意一块损坏,比如又是b,则a+b组成的RAID 1失效,这个时候如果a,c,d中再有任意一块盘损坏,只要不是a,整个RAID 10依赖可用,因此相对来说,RAID 10的容错性能更好一些。

由上可知,既使应用了RAID陈列,并非就万事大吉,最重要的是根据其不同特性来应用,比如说,对于Standby系统,我们知道,它通常都处于少读而多写的状态,这种情况下,采用raid5就是不恰当的,因为RAID 5有迭代的写损失。同理对于Online Redo文件实际也是这样,Online Redo多数情况下都处于频繁写而少读的状态,对于这些文件,我们甚至可以更极端一些,连存储都不用,直接扔到裸设备上去(不要做镜像,因为Online Redo自身就是有冗余的),比如通常每组Online Redo会有二份冗余,假如你的数据为总共设置了5组,那么你只需要创建10个裸设备,并将Online Redo文件分别指定到这些裸设备上,我认为这样Online Redo的写效率将会是最高的。当然,如果每组Online Redo只有一个文件,你决定将Online Redo都存储到RAID 1盘阵,我认为也相当可行。

近几年来,磁盘价格G/元跌幅堪比A股市场,因此RAID 0+1/10这种曾经认为成本极高昂的搭建方式也越来越普及,可以说真正接近了安全性,高性能,低成本的终极目标。我觉着,如果你实在抽不出时间为不同文件指定不同存储方式,那么将所有文件都扔到RAID 10阵列上,也是个不错的选择。

阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~