我在 Windows Server 2008 上运行 SQL SERVER 2005 数据库,其配置如下:SERVER:HP Proliant ML380 G7 CPU:1 RAM:10 GB RAM HHD:3*300 GB HHD,具有 RAID 5 配置。
它有 10 个实时数据库和 10 个历史数据库,大小从 500MB 到 6GB 不等。这些数据库大约有 100 个用户可以读写。
每秒的读取次数比写入次数多,我没有确切的统计数据。
现在,我们正在尝试升级我们的服务器,并考虑更好的 RAID 配置,一个用于数据文件,另一个用于操作系统,日志文件和 tempdb。
有人能建议我哪个 RAID 最适合我的系统吗?
RAID1 还是 RAID5 还是 RAID10?
我应该进行两次 RAID 吗?
通过搜索,我发现 RAID 10 不错,但也有人说“RAID 10 的优势只是神话”,请参阅下面的文章。
http://www.zdnet.com/blog/ou/comprehensive-raid-performance-report/484
答案1
拥有这样的统计数据会非常有帮助。通常,我会尝试估算应用程序可能需要的 IOPS 数量,以便顺利运行并做出响应。有了这些信息,我就可以进行某种容量规划,以评估哪种 RAID 级别最适合使用,并估算实现所需 IOPS 所需的主轴/磁盘数量(因为每个磁盘都可以根据其转速、平均延迟和平均寻道时间提供一定数量的 IOPS)。
这只是一个例子。根据这个文件,MS SQL Server 2008 在 3557 个 SQL 事务(每秒)中生成 29000 IOPS。假设我们有一个数据库,需要这样的 IOPS,其中 75% 的请求是读取 IOPS,25% 是写入 IOPS(1 个读取请求或 1 个写入请求为 1 IOPS)。此示例不计算缓存命中。
现在,底层磁盘阵列/磁盘需要提供多少 IOPS?我们可以使用这个简单的公式来估算
TOTAL_IOPS = REQ_IOPS x READ_IOPS + REQ_IOPS x WRITE_IOPS x RAID_PENALTY
在我们的示例中,我们有REQ_IOPS = 29000
、READ_IOPS = 0.75
和WRITE_IOPS = 0.25
。唯一缺少的变量是所谓的 RAID 惩罚。单个 SAS 磁盘(15k RPM)平均有大约 200 IOPS。但是当磁盘是 RAID 组的一部分时,我们无法获得这种数量的 IOPS,因为需要进行某种计算才能将数据写入磁盘,以便我们可以从磁盘故障中恢复。因此,RAID1/10(具有 2 个子镜像)的惩罚为 2,因为将进行 2 次写入,每个磁盘一次写入,而 RAID5/50 的惩罚为 4,因为对于磁盘的每次更改,我们都在读取数据、读取奇偶校验,然后在操作完成之前写入数据和写入奇偶校验。RAID6 的惩罚为 6。
这对我们意味着什么?让我们使用RAID_PENALTY = 2
TOTAL_IOPS = 29000 x 0.75 +29000 x 0.25 x 2 = 36250 IOPS
TOTAL_DISKS = 36250 / 200 ~ 182 disks
在 RAID5 配置中RAID_PENALTY = 4
TOTAL_IOPS = 29000 x 0.75 +29000 x 0.25 x 4 = 50750 IOPS
TOTAL_DISKS = 50750 / 200 ~ 254 disks
上述示例向我们展示了,实现 29000 IOPS 显然需要在 RAID5 配置中比在 RAID10 中更多的磁盘。另一个问题是这种配置的可用磁盘容量是多少?如果我们的 SAS 磁盘有 500GB,那么在 RAID10 配置中我们将有 500 x 182 / 2 = 45.5TB,而在 RAID5 中则有 500 x (254 - 1) = 126.5TB(使用 RAID10 的相同配置将需要 506 个磁盘!!!)。相当不错。
那么,您是否需要价格最实惠的 IOPS?那么就选择 RAID10,因为它具有最佳的价格/IOPS 比率。或者,您是否希望拥有更高的容量但具有相似的 IOPS?那么就选择 RAID5,因为它具有最佳的价格/MB 比率。
最后,此表总结了各种 RAID 级别的共同特征,可以帮助您选择正确的级别:
可以看出,从性能角度来看,RAID10 是最合适的。RAID5 在写入方面表现不佳,因为它的惩罚为 4,但它提供了更好的容量。
答案2
RAID5 很少适用。至少,您应该使用从阵列中拉出的一个驱动器来分析性能。阵列重建可能需要几个小时,不包括获取替换驱动器的时间。当阵列中缺少一个驱动器时,性能通常会降低。
我会选择 RAID 10。为事务日志设置单独的主轴并不罕见,并且它们具有顺序写入特性。RAID 1 可能适合这种情况。
答案3
据我所知,SQL Server 建议使用 RAID 0、RAID 1 和 RAID 5。
请查看此链接:1