我听说 RAID 5 的写入性能有时非常糟糕。虽然我想要它提供的冗余,但我不想牺牲数据库插入/更新时间。
这是我应该担心的事情吗?如果是,那么获得冗余的建议是什么?和写入性能好吗?
答案1
由于 I/O 非常随机,因此通常建议使用 RAID 10。以下是示例。计算略微简化,但非常具有代表性。
假设您有一个 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 更安全。
答案2
事务数据库
RAID-5写入速度相对较慢,因为控制器需要加载足够的数据来重新计算写入时的奇偶校验。写入操作将引发至少四个磁盘操作:
读取奇偶校验块
读取旧块(假设它尚未在缓存中)以将该值与奇偶校验块进行异或。
写入新的校验块(旧校验块XOR旧数据块XOR新数据块)
写入新的数据块。
如果系统不使用写回缓存,则意味着所有这些操作都处于 I/O 完成的关键路径上。通常,数据库写入就是这种情况 - 事实上,Microsoft(例如)有一个用于 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 处理期间可能会得到大量工作。但是,磁盘上的成本节省可能相当小。
答案3
嗯,这很大程度上取决于你的容错/风险承受能力。RAID5 有很多问题。我的 DB 服务器目前有两个镜像驱动器,如果要扩大规模,我会选择具有更多奇偶校验的驱动器,可能是 RAID6 或 RAID10。
此外,如果您的应用程序对正常运行时间至关重要,我可能会建议您使用两个具有复制功能的数据库服务器,主-主或热备用或其他方式。 RAID 只能帮助防止磁盘故障,但服务器上可能出现的问题还有很多 :)
答案4
RAID 1,这是我的最终答案
原因:
镜像对为故障磁盘提供了足够的冗余,并且 RAID 继续运行直到最后一个磁盘。
如果您仔细放置数据和索引,镜像对将产生更高的读取 I/O 性能...[提示:对数据及其索引使用单独的卷]。您可以通过双工控制器获得更高的性能。