SQL Server 在RAID 10 vs. RAID 5性能

RAID 10 vs. RAID 5 Performance 上给出了使用SQLIO.EXE 产生8KB 随机读和写的一个性能数据图,相差接近一倍的性能差距。

磁盘访问时间=磁盘寻道时间+延迟

延迟时间=1minute/RPM/2

决定IOPS的主要因素在于阵列的算法、Cache命中率,以及磁盘个数。阵列的算法会由于阵列的不同而不同,例如在hds usp上面,可能因为ldev(lun)存在队列或者资源限制,而导致单个ldev的IOPS上不去。所以我们在进行存储I/O设计时,必须结合我们使用的存储产品去了解这个存储的一些算法规则与限制。

在RAID5与RAID10上,读IOPS没有差别。但是,相同的业务写IOPS,最终落在磁盘上的IOPS却是有差别的,而我们评估的正是磁盘的IOPS,如果达到了磁盘的限制,性能肯定是上不去了。

1. 安全性方面的比较

其实在安全性方面,毋庸置疑,肯定是RAID10的安全性高于RAID5。我们可以通过简单的分析来得出此结论。当盘1损坏时,对于RAID10,只有当盘1对应的镜像盘也损坏,才会导致RAID失效。但是对于RAID5,剩下的3块盘中,任何一块盘出现故障,都将导致RAID失效。

在恢复的时候,RAID10恢复的速度也快于RAID5。

2. 空间利用率的比较

RAID10的利用率是50%,RAID5的利用率是75%。硬盘数量越多,RAID5的空间利用率越高。

3. 读写性能方面的比较

主要分析如下三个操作:读、连续写、离散写。

提示:

存储的Cache我们已经在2.1.3中讲述,因为这三个操作跟Cache有很大的关系。

1) 读操作方面的性能差异

RAID10可供读取有效数据的磁盘个数为4,RAID5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者在读方面的性能应该是基本一致的。

2) 连续写方面的性能差异

在连续写操作过程中,如果有写Cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些,虽然也许并没有太大的差别(这里要假定存储有一定大小,足够的写Cache,而且计算校验的CPU不会出现瓶颈)。

因为这个时候的RAID校验是在Cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,然后同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜像。

3) 离散写方面的性能差异

例如SQL Server数据库每次写一个数据块的数据,如4KB或8KB,由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够填满RAID5的一个条带,比如32KB(保证每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。

4) 磁盘的IOPS对比

对空间利用率要求较高,而对安全性要求不是特别高的大文件存储的系统,采用RAID5比较好。相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用RAID10的方式比较好。

根据经验与分析:小I/O的数据库类型操作,如ERP等应用,建议采用RAID10;而大型文件存储、数据仓库,如医疗PACS系统、视频编辑系统,从空间利用的角度,建议采用RAID5。

在一个实际的案例中,一个恢复压力很大的standby(这里主要是写,而且是小IO的写),采用了RAID5的方案,发现性能很差,通过分析,每个磁盘的IOPS在高峰时期,快达到200了,导致响应速度非常之慢。后来改造成RAID10,就避免了这个性能问题,每个磁盘的IOPS降到了100左右。所以,了解RAID5和RAID10原理,对我们根据应用系统的特点来做存储I/O设计,从而保证性能非常重要。

相关文章:

RAID在SQL Server中的应用(RAID几种级别)

RAID 10 vs. RAID 5 Performance

SQL Server之RAID简介

SQL Server IO 子系统浅究 II

SQLIO测试 SAN

服务器IO测试利器--SQLIO

Raid5 Raid10性能测试

SQL Server Performace on Solid State Drives (SSD)

你可能感兴趣的:(数据库)