我应该在 RAID 5 配置下运行我的数据库吗?

Sco*_*aad 13 raid performance database

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

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

Tor*_*Guy 23

通常推荐使用 RAID 10,因为 I/O 是如此随机。这是一个例子。计算有点简化,但很有代表性。

假设您有一个 6 个驱动器阵列,并且您的驱动器每秒可以执行 100 个 I/O (IOPS)。如果读取率为 100%,则将使用所有六个驱动器,RAID 10 和 RAID 5 的 IOPS 约为 600。

最坏的情况是 100% 写入。在这种情况下,RAID 10 的性能将减半(因为每次写入两个驱动器),因此它将获得 300 IOPS。RAID-5 会将每次写入转换为两次读取,然后再转换为两次写入,因此它将获得 1/4 的性能或大约 150 IOPS。这是一个相当大的打击。

您的实际读/写模式将介于这两个极端之间,但这就是通常建议将 RAID 10 用于数据库的原因。

但是,如果您没有繁忙的数据库服务器,那么您甚至可以使用 RAID-6。如果我知道数据库不会成为瓶颈,我经常会这样做,因为它比 RAID 10 或 RAID 5 为您提供了更多的安全性。


Con*_*lls 22

事务数据库

RAID-5 的写入速度相对较慢,因为控制器需要加载足够的数据来重新计算写入的奇偶校验。写操作至少会导致四个磁盘操作:

  • 在奇偶校验块中读取

  • 读取旧块(假设它尚未在缓存中)以将值与奇偶校验块进行异或。

  • 写入新奇偶校验块(旧奇偶校验块 XOR 旧数据块 XOR 新数据块)

  • 写入新数据块。

如果系统不使用回写缓存,这意味着所有这些操作都在 I/O 完成的关键路径上。通常,数据库写入就是这种情况——事实上,微软(例如)有一个用于 SQL 服务器的 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 处理期间获得大量工作。但是,在磁盘上节省的成本可能相当小。