RAID 5和RAID 10 的比较--- 针对数据库服务器存储方案的选择

RAID 5和RAID 10 的比较

RAID5 和 RAID10 谁好谁差,仁者见仁,智者见智,没有统一的说法。使用的情况实际上是需要根据企业的具体需求来定点。在这里 ,我们分别讨论下他们的性能和在什么情况下更适宜使用哪种RAID 方式。

    为了更清楚他们的原理,我们拿四块硬盘分别做这两种RAID,且从以下的几个 方面来比较。
这里RAID5选择 3D+1P 的组合方式,RAID10 选择 2D+2D 的组合方式。
1) 读操作。由于读都是四块硬盘上进行全局读,所以就单纯的从读效率上来说,两组RAID是没有太大的差别。
2) 连续写。我们首先考虑RAID5,在连续写的时候,RAID5可以一次写3个数据入CACHE ,然后再CACHE 区内
           进行校验,得到校验值。RAID10 一次最多只可以写2个数据入CACHE,同时写到镜像盘的写
           CACHE 里。 但是他们最后落到磁盘上的写操作都是相同的。所以在连续写的强度不是很高度情况
           下这两组的RAID性能上相差不大的。但是对于高强度的连续读,RAID5更有优势。
3) 离散写。离散写上我们考虑到重点,因为在ORACLE 里大部分写都是离散写,写数据文件,写日志文件。
           写日志文件看 上去是连续写,其实写日志文件的数量不读,根本就不可以填满一个RAID组的条带
           ,所以也是离散写。 在这里我们比较RIAD5和RAID10的一次修改数据,修改RAID5的一个数据时
           将发生4次IO,而同样的修改,RIAD10只发生2次IO 。这里不考虑RAID5的读命中情况。通过这
           也可以看出写CACHE 对RAID5 的重要性,当然写CACHE 对RAID10 也是同样重要。
   所以,做RAID 的时候考虑使用哪种RAID ,应该看公司的应用需要。 如果是以大量的事务性的操作,在典型的OLTP 环境里,我们考虑RAID10更好些,因为OLTP 环境,IO 性能上我们考虑的主要方面。对于典型的数据仓库环境,OLAP 环境,我们选择RAID5 ,因为从空间上来说,RAID5更合适。
///
在硬盘价格越来越便宜、硬盘上的数据越来越宝贵、对硬盘上数据的访问效率也越来越高的今天,已经有越来越多的用户放弃在单盘上存放数据的做法,而采用 Raid 的方式对多个盘进行处理,从而获得更高的安全性和数据存取效率。  

RAID,为Redundant Arrays of Independent Disks的简称。意为廉价冗余磁盘阵列,是磁盘阵列在技术上实现的理论标准,其目的在于减少错误、提高存储系统的性能与可靠度。常用的等级有0135级等。目前最常用的是010+1105 这三种Raid级别。下面分别一一介绍 

1.       Raid-0:又称stripe,是Data Striping(数据分割)技术的实现。 

它将所有硬盘构成一个磁盘阵列,可以同时对多个硬盘做读写动作,但是不具备备份及容错能力,它价格便宜,硬盘使用效率最佳,完全不浪费硬盘,并且数据吞吐效率最高,但是可靠度是最差的。以一个由两个硬盘组成的RAID Level 0磁盘阵列为例,它把数据的第12位写入第一个硬盘,第三和第四位写入第二个硬盘……以此类推,所以叫“数据分割”。如图1所示:

 图1:Raid0示意图  

因为各盘数据的写入动作是同时做的,所以它的存储速度可以比单个硬盘快几倍。但是,这样一来,万一磁盘阵列上有一个硬盘坏了,由于它把数据拆开分别存到了不同的硬盘上,坏了一颗等于中断了数据的完整性,如果没有整个磁盘阵列的备份磁带的话,所有的数据是无法挽回的。因此,尽管它的效率很高,但是很少有人冒着数据丢失的危险采用这项技术。  

2.       Raid-1:又称mirror,使用的是Disk Mirror(磁盘映射)技术  

就是把一个硬盘的内容同步备份复制到另一个硬盘里,所以具备了备份和容错能力,这样做的使用效率不高,会浪费一半的硬盘,同时数据的读效率是单块硬盘的2倍,写效率没有提高,但是可靠性高。如图2所示: 

图2:Raid1示意图

3.       Raid-0+1:又称stripe+mirror,将Disk stripe disk Mirror技术结合起来使用。   

就是将硬盘分成相同个数的2个分组,每个分组分别做Raid0(磁盘分割)之后,再对这2个分组做Raid1(磁盘镜像)。这样做的使用效率不高,也会浪费一半的硬盘,但是提高了数据的读写效率,也保证了可靠性。如图3所示:  

 图3:Raid0+1示意图

4.       Raid-1+0:又称mirror + stripe,将disk MirrorDisk stripe技术结合起来使用。   

就是先将磁盘两两分组做Raid-1(磁盘镜像),然后对镜像磁盘组做Raid-0(磁盘分割),如图4所示:  

 图4:raid1+0示意图

从硬盘的使用效率和数据的读写效率来说,Raid-1+0Raid-0+1是完全一致的。但是从可靠性上来说,Raid1+0Raid01要更安全一些。我们再来比较图3与图4:  

在图3中,我们假设磁盘A1坏掉了,那么A1+A2Raid0磁盘分组就整个坏掉了,只能靠B1+B2Raid0磁盘分组上的数据来保证可靠性;如果再坏第二块盘,而且是B1或者B2盘,那么整个Raid0+1的磁盘组就完全不可用了;随着Raid0分组中磁盘的个数越多,在另一个RAID0磁盘分组中出现故障的可能性就越大,因此,整个Raid01出现故障的可能性也越大; 

 而在图4中,我们同样假设磁盘A1先坏掉了,那么A1B1Raid1 磁盘分组可以靠B1磁盘上的数据来保证可靠性,从而与A2B2Raid1磁盘分组组成Raid0,继续使用;如果再坏第二块盘,则只有B1同时坏掉的情况下,才有可能导致整个A1B1Raid1磁盘分组上的数据不可用从而导致整个Raid10出现故障;而在B2坏掉的情况下,仍然能够保证整个Raid10能够可靠的继续使用;  随着raid1磁盘分组的个数增多,在同一个raid1磁盘组中同时出现磁盘故障的概率就越低,所以,整个raid1+0出现故障的可能性就越小了;

 

5.       Raid -5 

RAID 5也使用的是Disk Striping(硬盘分割)技术,与Level 0的不同之处在于它增加了奇偶校验,并且把奇偶校验数据存放到各个硬盘里,各个硬盘在SCSI控制卡的控制下平行动作,有容错能力,它的使用效率是安装几个再减掉一个。如图5所示:  

 图5:Raid5示意图

从读写效率来说,由于Raid-5也采用Disk Striping(硬盘分割)的技术,因此读写效率比Raid1要高,但是由于它需要做奇偶校验,又比单纯的Raid0要低,该读写效率受到每个磁盘阵列或者软件Raid的奇偶校验算法的影响而有不同程度的下降。  另外,从磁盘的使用效率上来说,由于Raid5仅浪费一块硬盘的容量,比Raid1(包括Raid1+0或者Raid01在内)要高得多。 从数据的安全性来说,我们可以看到,所有的奇偶校验数据也是通过stripe分布在不同的磁盘上,因此,如果有超过2块的硬盘损坏时,整个Raid5上的数据就会遭到破坏。  

下面对这几种Raid级别在成本、效率、安全可靠性方面做一个比较:   

 

 

成本 

读效率

写效率

安全性

Raid0

++

 

 

++

-

Raid1

-

++

 

 

++

Raid01

-

++

++

++

Raid10

-

++

++

+++

Raid 5

+

+

+

+

 

 

 

如何为数据库服务器配置存储和内存

随着服务器硬件的功能变得越来越强大,而价格一路急剧下跌,许多公司(尤其是小公司)发现如今购买数据库服务器面临众多选择。这意味着,经验相对欠缺的数据库管理员们也被要求设计功能越来越强大的系统。你在为大型系统设计数据库系统时,能够买到有许多硬盘和充足内存的大型数据库服务器。以下是你在设计系统时应当遵守的一些基本原则。
•存储系统
    人们在设计磁盘阵列时最常犯下的错误就是,只计算所需的闲置容量。闲置容量只是设计存储子系统时要考虑的一部分而已;另一个部分就是存储系统需要支持的输入/输出操作次数。
    应当遵守的一条基本原则就是,写操作频繁的数据库最好使用RAID 10阵列,而读操作频繁的数据库通常最好使用RAID 5阵列。原因在于,如果把数据写到RAID 5阵列,性能会受到影响。由于把数据写到RAID 5阵列上,存储系统必须在写数据之前计算出奇偶检验位,而算出奇偶检验位需要相当长的时间,这意味着写到RAID 5阵列上的性能会降低。
    由于这种性能影响,我们总是建议你应当把事务日志放到RAID 10阵列上。事务日志是写操作始终很频繁的文件,不管数据库是以读操作为主的数据库,还是以写操作为主的数据库。tempdb数据库也应当放在RAID 10阵列上,具体来说放在与事务日志文件所在阵列不同的另一个RAID 10阵列上。
    对每个磁盘阵列进行分区时,应当确保分区正确对齐。默认情况下,Windows 2003及以下版本没有正确对齐分区,这会导致磁盘子系统的性能达不到最理想水平。可以通过使用diskpart.exe实用程序(Windows 2000中的diskpar.exe)创建分区来解决这个问题。这样创建的每个分区其对齐偏移量应为64kb;在默认情况下,创建的每个分区其对齐偏移量为32kb。Windows 2008在默认情况下创建的分区其对齐偏移量为128kb。
•物理数据库构建
    微软最近开始推荐使用的一项比较新的技术就是,针对两个至四个CPU核心当中的每个核心,数据库应当有一个物理数据库文件。应当为数据库里面的每个文件组做到这一点。
    如果你的服务器有两个四核CPU,那么共有八个核心。我们假定数据库有两个文件组,一个名为Data,另一个名为Indexes。那么每个文件组都应当有两个至四个物理文件。这项技术让SQL Server可以对磁盘输入/输出进行优化。可能的话,你应当尽量分散文件,以便位于每个存储阵列上的文件尽可能少。
    tempdb数据库的配置应有点不同。配置tempdb数据库时,建议针对每个CPU核心,数据库应当有一个物理文件。这样系统就可以为tempdb数据库尽量加快输入/输出操作。与用户数据库一样,放在每个磁盘阵列上的文件也应当尽可能少。
    你在数据库里面应当始终至少有两个文件组。第一个文件组包括表,第二个组包括索引。你需要让它们位于不同的文件组,那样查询索引时,装入到表的操作不会受到影响,反之亦然。
•系统内存
    在过去,购买只安装了数GB内存的数据库服务器相当常见。那是因为内存的价格还很昂贵。
    如今,内存价格相当便宜;只要你能承受得了,应当购买尽量多的内存。内存越多,数据库的运行速度几乎总是越快。例外情况就是,如果你安装的内存超过了数据库的大小。举例来说,如果你有3 GB大小的数据库,但安装了8GB内存,那么为服务器添加更多内存对提升数据库的性能没有帮助,因为SQL Server可能已经能把整个数据库装入到内存中。
    在决定为SQL Server分配多大内存时,绝对不要让SQL Server把所有内存都分配给它。因为Windows操作系统需要内存来运行,安装在数据库服务器上的其他任何软件同样需要内存来运行,比如备份软件和反病毒软件等。 建议留出一两GB内存用于操作系统及所用的其他软件。这个内存量的大小取决于安装了哪些软件。
    因为没有两个数据库服务器是一样的,所以没有明确的原则规定你的硬件解决方案应当是什么样子。你有众多选择;要设计一款将来可以使用多年的可靠的解决方案,关键在于明白自己的数据库需求,明白自己使用的硬件,明白这些需求在哪些环节得到了满足,以便既没有购买对现在而言配置过低的硬件,也没有购买对下一年而言配置过高的硬件。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值