我是否应该使用RAID 5配置运行数据库?


13

我听说RAID 5的写入性能有时会令人吃惊。虽然我想要它提供的冗余,但我不想牺牲我的数据库插入/更新时间。

这是我应该担心的事情吗?如果是这样,对获得具有良好写入性能的冗余的建议是什么?


1
哪个DB?Oracle + RAID 5曾经是一个禁忌。不知道是否仍然如此。
cagcowboy

在此特定示例中,数据库在MySql和MSSQL上运行。
Scott Saad 2009年

在有关应用程序的问题(数据库读/写混合,正常运行时间和恢复时间要求)方面更具特异性的问题可能会得到更适用的答案。这些事情可能会影响最佳解决方案。
杰·史蒂文斯

Answers:


23

通常建议使用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为您提供了更多的安全性。


22

交易数据库

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处理期间可能会做很多工作。但是,磁盘上的成本节省可能很小。


回写式高速缓存:如果您要购买带有“电池后备式”回写式高速缓存的RAID控制器,请注意,似乎并未随附电池。确保让您的供应商包括一个。
David Hicks,2009年

有些会,有些不会。我有很多Adaptec 2200,它们没有电池。有些确实标配它们。
ConcernedOfTunbridgeWells,2009年

1
您的回复有误。你不会需要阅读每一个驱动器重新计算奇偶校验。一次写入变为2次读取和2次写入。RAID5将不会碰到示例14驱动器阵列中的其他12个驱动器。
TorgoGuy

实际上,我确实相信这个人是对的。您可以读取该奇偶校验并将其与该块的旧值进行异或,然后再次与该块的新值进行异或。之前从未见过,但可以使用。
ConcernedOfTunbridgeWells,2009年

3

好吧,这在很大程度上取决于您的容错能力。RAID5有很多问题。我的数据库服务器当前有两个镜像驱动器,如果要扩展它,我会选择具有更高奇偶校验的功能,可能是RAID6或RAID10。

另外,如果您的应用程序对正常运行时间很重要,那么我可能会建议您使用两台具有复制功能的数据库服务器,即master-master或热备用或其他。RAID仅有助于防止磁盘故障,但是在服务器上还有很多可能出错的地方:)


3

取决于您正在做多少写作。

如果它是一个相当轻量的“ Web应用程序”,那么您不太可能看到RAID5的性能下降。

如果您要建立具有大型ETL的多GB数据仓库,则RAID 5上的写缓冲区将迅速溢出,直接进入RAID 5的“写入性能不佳”状态。

每次RAID5写入将至少引起3次写入(加上CRC计算)。进行缓冲时,这是很好的和快速的(少量短暂的活动-单记录更新和插入)。如果这是持续写入(大容量插入/更新),则将引起注意。

这是性能与空间之间的平衡。RAID 10(带区驱动器的镜像)既提供了性能和弹性,又将容量减少了50%。

RAID5提供更高的容量,良好的读取性能,但写入性能较差(较大)。


2

RAID 1,这是我的最终答案

原因:

镜像对可为故障磁盘提供足够的冗余,并且RAID继续对最后一个磁盘起作用。

如果您仔细放置数据和索引,则镜像对可提高读取的I / O性能。[提示:为数据及其索引使用单独的卷]。通过使控制器双工可以获得更大的性能。


为什么不使用RAID 1 + 0?
Brian Knoblauch


2

简短的回答:不。

长答案:除非您的数据库很小或要求很少,否则不要。数据检索在很大程度上取决于每秒的磁盘I / O操作,而条带化的开销会随着时间的流逝而耗尽您的磁盘访问权限,尤其是长时间运行查询时。大多数数据库都是在RAID 10样式的设置上运行的,或者具有保存数据分区的特定卷。是的,RAID 10会消耗您的写入成本,但是您的读取性能(使用正确的设置)将会提高


1

如何获得具有良好写入性能的冗余的建议是什么?

大写回缓存。增加硬件RAID控制器上的RAM或软件RAID解决方案可用的RAM(即,对于Linux的MDADM,增加系统RAM,MDADM气球将未使用的系统RAM用作写缓存)。该建议适用于给定的“大”值-如果您经常(足够多的时间(5%)?)以足够快的速度写入数据以填充写入缓存,无论它有多大,那么这几乎没有什么区别。


1

真正的目的是将数据文件,日志文件与OS文件分开。日志按顺序写入数据引起大量随机读取和一些随机写入

通过构建支持这些特征的RAID配置,可以大大提高性能

突袭1-镜像非常适合日志文件突袭10适合您的数据文件。将TempbDB和备份分离到单独的驱动器也值得一看。添加文件组是提高性能的另一种方法。关于SAN,这还不是很清楚。这取决于您是为每个LUN构建特定的RAID配置还是取决于心轴数。


0

本着最近StackOverflow博客文章的精神,我们不应该重新呈现Internet上已经存在的答案,我指出了这一点

RAID-5在提供的冗余方面并不是唯一的,它只是这样做,同时消耗的磁盘数量比某些替代方案少。您可以选择具有相同或更好冗余度和更好写入性能的其他内容


0

从RAID5运行数据库通常是一个错误。我只在两种情况下看到过这种情况-精心设计的数据库,读取密集,很少写入数据,以及RAID5造成的“浪费空间”在政治上不可行的数据库。

RAID5将破坏事务性能。

另外,如果您正在考虑使用RAID5,请查看是否可以使RAID6正常工作。理论上的可靠性要好得多,尽管由于不成熟的实现,现实世界中的可靠性通常更差。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.