我听说RAID 5的写入性能有时会令人吃惊。虽然我想要它提供的冗余,但我不想牺牲我的数据库插入/更新时间。
这是我应该担心的事情吗?如果是这样,对获得具有良好写入性能的冗余的建议是什么?
我听说RAID 5的写入性能有时会令人吃惊。虽然我想要它提供的冗余,但我不想牺牲我的数据库插入/更新时间。
这是我应该担心的事情吗?如果是这样,对获得具有良好写入性能的冗余的建议是什么?
Answers:
通常建议使用RAID 10,因为I / O非常随机。这是一个例子。计算有些简化,但是很有代表性。
假设您有一个6个驱动器阵列,并且您的驱动器每秒可以执行100个I / O(IOPS)。如果您有100%的读取次数,则将使用所有六个驱动器,并且RAID 10和RAID 5的驱动力约为600 IOPS。
最坏的情况是100%写入。在这种情况下,RAID 10的性能将降低一半(因为每次写入都要写入两个驱动器),因此它将获得300 IOPS。RAID-5会将每次写入转换为两次读取,然后再进行两次写入,因此它将获得1/4的性能或大约150 IOPS。那是一个很大的打击。
您的实际读/写模式将介于这两种极端之间,这就是为什么通常建议将RAID 10用于数据库。
但是,如果您没有繁忙的数据库服务器,那么您甚至可以进行RAID-6。如果我知道数据库不会成为瓶颈,我通常会这样做,因为它比RAID 10或RAID 5为您提供了更多的安全性。
交易数据库
RAID-5写入速度相对较慢,因为控制器需要加载足够的数据以重新计算写入时的奇偶校验。写操作将至少引起四个磁盘操作:
在奇偶校验块中读取
读入旧块(假设它尚未在缓存中)以将该值与奇偶校验块进行异或。
写入新的奇偶校验块(旧的奇偶校验块XOR旧数据块XOR新数据块)
写入新的数据块。
如果系统不使用回写缓存,则意味着所有这些操作都位于完成I / O的关键路径上。通常,数据库写入就是这种情况-实际上,例如,Microsoft(例如)具有用于SQL Server的SAN设备的认证程序,要求供应商保证此行为。有时,较旧的RAID-5设备没有使用此优化,而不得不从整个条带重新计算奇偶校验。
RAID-10的每个驱动器都有一个镜像,不需要读取其他数据即可计算奇偶校验。这意味着写操作所需的物理I / O少得多。
RAID-50位于中间的某个位置,该卷分为多个RAID-5卷,这些卷又是条带化的。在由以3 + 1方案划分的组组成的RAID-50上,写入最多生成三个额外的磁盘I / O请求。如果您愿意,可以将RAID-5和RAID-10视为RAID-50的特例。RAID-50主要用于在许多物理磁盘上提供大容量卷
还存在其他奇偶校验方案,例如RAID-6(每套具有两个冗余磁盘的奇偶校验方案)。现代磁盘足够大,以至于重新阵列化阵列可能会花费很长的时间-足够长的时间可能会在磁盘阵列出现第二个磁盘故障的风险重建意义重大。RAID-6通过拥有第二个奇偶校验磁盘来减轻这种风险,该奇偶校验磁盘需要三个磁盘故障才能导致数据丢失。可以使用与RAID-50方案类似的技巧来制作RAID-60阵列。
最后,单个镜像对(称为RAID-1)可以为某些任务提供冗余和足够好的性能。特别是,您可能会发现RAID-1为大量数据库日志流量提供了足够的吞吐量。在下面的更多内容。
如果您有大量写工作负载,则可能会从RAID-10卷获得性能提升。如果您可以从较少数量的物理磁盘上获得所需的吞吐量(假设磁盘有足够的空间),那么这是一个胜利。一些项目,例如数据库服务器上的日志或临时区域,应该位于RAID-1或RAID-10卷上,因为它们会产生大量写流量。
日志
日志卷主要由顺序数据访问模式来表征,本质上是一个环形缓冲区,由“将数据写入此块”中的命令组成,它们由核心DBMS引擎作为生产者写出并作为消耗者处理。通过日志读取器功能。单个镜像对实际上将处理大量日志流量。
重载系统和文件服务器
在大量读取的系统(例如数据仓库)上,您可能需要使用一个或多个RAID-5卷。在文件服务器上,磁盘访问将在很大程度上基于整个文件,因此写操作可能会写出组成奇偶校验块的大多数块。在这种情况下,RAID-5的性能指标将更轻。
过去,磁盘上的成本节省可能是可观的,但是现在这不太可能成为问题。
回写缓存和RAID-5
在具有电池后备缓存的SAN或内部RAID控制器上,您可以启用“回写”缓存。这会缓存写入并将控制权返回给应用程序。控制器将I / O报告为已完成。但是,它不一定立即将数据写出到磁盘。此功能使RAID-5奇偶校验读/写操作得到实质性优化,并可以减轻RAID-5x卷的写性能损失。
但是,这仍然会带来数据完整性问题的小风险。主机系统已被告知,实际上并非如此,该写操作已完成。硬件故障有可能在数据库服务器上的(例如)日志和数据卷之间创建数据不一致。因此,不建议对事务系统使用回写缓存,尽管它可能会在诸如ETL流程之类的性能上获得优势。
摘要
如今,磁盘空间如此便宜,以至于事务系统应该将RAID-1或RAID-10用于日志卷,将RAID-10用于数据卷。物理磁盘大小可能比数据库大得多,并且RAID-10将允许在相同数量的磁盘上实现更高的写入吞吐量,从而有可能减少支持系统所需的磁盘卷数。
在诸如数据仓库之类的东西上,您仍然可以利用大型的,具有大量索引的事实表来咀嚼空间,因此使用RAID-5或RAID-50数据量可能会获得较小的价格优势。但是,日志和tempdb仍应放在RAID-10卷上,因为它们在ETL处理期间可能会做很多工作。但是,磁盘上的成本节省可能很小。
取决于您正在做多少写作。
如果它是一个相当轻量的“ Web应用程序”,那么您不太可能看到RAID5的性能下降。
如果您要建立具有大型ETL的多GB数据仓库,则RAID 5上的写缓冲区将迅速溢出,直接进入RAID 5的“写入性能不佳”状态。
每次RAID5写入将至少引起3次写入(加上CRC计算)。进行缓冲时,这是很好的和快速的(少量短暂的活动-单记录更新和插入)。如果这是持续写入(大容量插入/更新),则将引起注意。
这是性能与空间之间的平衡。RAID 10(带区驱动器的镜像)既提供了性能和弹性,又将容量减少了50%。
RAID5提供更高的容量,良好的读取性能,但写入性能较差(较大)。
RAID 1,这是我的最终答案
原因:
镜像对可为故障磁盘提供足够的冗余,并且RAID继续对最后一个磁盘起作用。
如果您仔细放置数据和索引,则镜像对可提高读取的I / O性能。[提示:为数据及其索引使用单独的卷]。通过使控制器双工可以获得更大的性能。
对于很多“为什么不这样”的指南,这在我使用过的Oracle DBA中总是很受欢迎的。
与任何突袭五人之战-http: //www.miracleas.com/BAARF/
本着最近StackOverflow博客文章的精神,我们不应该重新呈现Internet上已经存在的答案,我指出了这一点
RAID-5在提供的冗余方面并不是唯一的,它只是这样做,同时消耗的磁盘数量比某些替代方案少。您可以选择具有相同或更好冗余度和更好写入性能的其他内容