Scott Saad Asked: 2009-05-01 06:41:11 +0800 CST2009-05-01 06:41:11 +0800 CST 2009-05-01 06:41:11 +0800 CST 我应该从 RAID 5 配置运行我的数据库吗? 772 我听说 RAID 5 的写入性能有时会令人震惊。虽然我想要它提供的冗余,但我不想牺牲我的数据库插入/更新时间。 这是我应该担心的事情吗?如果是这样,有什么建议可以通过良好的写入性能获得冗余? performance raid database 11 个回答 Voted Best Answer TorgoGuy 2009-05-01T06:53:10+08:002009-05-01T06:53:10+08:00 通常建议使用 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 提供更多的安全性。 ConcernedOfTunbridgeWells 2009-05-02T08:31:20+08:002009-05-02T08:31:20+08:00 事务数据库 RAID-5的写入速度相对较慢,因为控制器需要加载足够的数据来重新计算写入时的奇偶校验。写操作至少会产生四个磁盘操作: 读取奇偶校验块 读取旧块(假设它尚未在缓存中)以将值与奇偶校验块进行异或。 写入新奇偶校验块(旧奇偶校验块异或旧数据块异或新数据块) 写入新的数据块。 如果系统不使用回写缓存,这意味着所有这些操作都在 I/O 完成的关键路径上。通常,数据库写入就是这种情况——事实上,微软(例如)有一个用于 SAN 设备的认证计划,用于与 SQL 服务器一起使用,要求供应商保证这种行为。有时较旧的 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 处理期间完成大量工作。但是,磁盘上的成本节省可能相当小。 Guy 2009-05-01T06:48:02+08:002009-05-01T06:48:02+08:00 看你写多少。 如果它是一个相当轻量级的“网络应用程序”,那么您不太可能在 RAID5 上看到任何性能影响。 如果您正在构建具有大型 ETL 的多 GB 数据仓库,那么 RAID 5 上的写入缓冲区将很快溢出,您将直接陷入 RAID 5 的“写入性能不佳”。 每个 RAID5 写入将导致至少 3 次写入(加上 CRC 计算)。缓冲时,这很好而且很快(活动的小短突发 - 单个记录更新和插入)。如果这是持续写入(大批量插入/更新),那么它会被注意到。 这是性能和空间之间的平衡。RAID 10(条带驱动器的镜像)提供了性能和弹性,但容量减少了 50%。 RAID5 提供更高的容量、良好的读取性能但较差(大)写入性能。 mikl 2009-05-01T06:55:09+08:002009-05-01T06:55:09+08:00 好吧,这在很大程度上取决于您的容错/风险承受能力。RAID5有很多问题。我的数据库服务器目前有两个镜像驱动器,如果我要扩大它,我会选择更奇偶校验的东西,可能是 RAID6 或 RAID10。 此外,如果您的应用程序对正常运行时间至关重要,我可能会建议使用两台具有复制功能的数据库服务器,主-主或热备用或其他。RAID 仅有助于防止磁盘故障,但服务器上可能出现的问题还有很多 :) ninegrid 2009-05-01T07:15:57+08:002009-05-01T07:15:57+08:00 RAID 1,这是我的最终答案 原因: 镜像对为故障磁盘提供足够的冗余,并且 RAID 继续运行到最后一个磁盘。 如果您仔细放置数据和索引,镜像对会产生更高的读取 I/O 性能... [提示:对数据及其索引使用单独的卷]。您可以通过双工控制器获得更高的性能。 Mark Regensberg 2009-05-02T07:47:38+08:002009-05-02T07:47:38+08:00 对于一些很好的“为什么不”指南,这在我合作过的 Oracle DBA 中一直很受欢迎...... 对抗任何五人组的战斗 - http://www.miracleas.com/BAARF/ Avery Payne 2009-05-02T14:32:34+08:002009-05-02T14:32:34+08:00 简短的回答:没有。 长答案:除非您的数据库非常小或要求非常低,否则不会。数据检索在很大程度上依赖于每秒的磁盘 I/O 操作,并且随着时间的推移,条带化的开销会耗尽您的磁盘访问,尤其是在长时间运行查询的情况下。大多数数据库在 RAID 10 样式设置上运行,或者使用保存数据分区的特定卷。是的,RAID 10 会花费您的写入成本,但您的读取性能(使用正确的设置)会大幅提升。 David Hicks 2009-05-02T11:03:57+08:002009-05-02T11:03:57+08:00 获得具有良好写入性能的冗余的建议是什么? 大型回写缓存。增加硬件 RAID 控制器上的 RAM 或软件 RAID 解决方案可用的 RAM(即,对于 Linux 的 MDADM,增加系统 RAM,MDADM 膨胀以使用其他未使用的系统 RAM 作为写入缓存)。该建议适用于给定的“大”值 - 如果您经常(5% 的时间?)以足够快的速度写入数据以填充写入缓存,无论它有多大,那么这将没有什么区别。 CPU_BUSY 2009-05-02T20:37:53+08:002009-05-02T20:37:53+08:00 真正的是将您的数据文件、日志文件与您的操作系统文件分开。日志顺序写入数据会导致大量随机读取和一些随机写入 通过构建支持这些特性的 RAID 配置,您可以大大提高性能 Raid 1 - 镜像非常适合日志文件 Raid 10 适合您的数据文件。它还值得考虑将 TempbDB 和备份分离到单独的驱动器。添加文件组是提高性能的另一种方法。对于 SAN,这不是很清楚。这取决于您是为每个 LUN 构建特定的 RAID 配置还是依赖于心轴数量。 The Archetypal Paul 2009-05-01T06:48:09+08:002009-05-01T06:48:09+08:00 本着最近 StackOverflow 博客文章的精神,我们不应该重新提供 Internet 上已有的答案,我向您指出这一点 RAID-5 在提供的冗余方面并不是独一无二的,它只是做到了,同时消耗的额外磁盘比某些替代方案少。您可以选择具有相同或更好的冗余和更好的写入性能的其他东西
通常建议使用 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 提供更多的安全性。
事务数据库
RAID-5的写入速度相对较慢,因为控制器需要加载足够的数据来重新计算写入时的奇偶校验。写操作至少会产生四个磁盘操作:
读取奇偶校验块
读取旧块(假设它尚未在缓存中)以将值与奇偶校验块进行异或。
写入新奇偶校验块(旧奇偶校验块异或旧数据块异或新数据块)
写入新的数据块。
如果系统不使用回写缓存,这意味着所有这些操作都在 I/O 完成的关键路径上。通常,数据库写入就是这种情况——事实上,微软(例如)有一个用于 SAN 设备的认证计划,用于与 SQL 服务器一起使用,要求供应商保证这种行为。有时较旧的 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 处理期间完成大量工作。但是,磁盘上的成本节省可能相当小。
看你写多少。
如果它是一个相当轻量级的“网络应用程序”,那么您不太可能在 RAID5 上看到任何性能影响。
如果您正在构建具有大型 ETL 的多 GB 数据仓库,那么 RAID 5 上的写入缓冲区将很快溢出,您将直接陷入 RAID 5 的“写入性能不佳”。
每个 RAID5 写入将导致至少 3 次写入(加上 CRC 计算)。缓冲时,这很好而且很快(活动的小短突发 - 单个记录更新和插入)。如果这是持续写入(大批量插入/更新),那么它会被注意到。
这是性能和空间之间的平衡。RAID 10(条带驱动器的镜像)提供了性能和弹性,但容量减少了 50%。
RAID5 提供更高的容量、良好的读取性能但较差(大)写入性能。
好吧,这在很大程度上取决于您的容错/风险承受能力。RAID5有很多问题。我的数据库服务器目前有两个镜像驱动器,如果我要扩大它,我会选择更奇偶校验的东西,可能是 RAID6 或 RAID10。
此外,如果您的应用程序对正常运行时间至关重要,我可能会建议使用两台具有复制功能的数据库服务器,主-主或热备用或其他。RAID 仅有助于防止磁盘故障,但服务器上可能出现的问题还有很多 :)
RAID 1,这是我的最终答案
原因:
镜像对为故障磁盘提供足够的冗余,并且 RAID 继续运行到最后一个磁盘。
如果您仔细放置数据和索引,镜像对会产生更高的读取 I/O 性能... [提示:对数据及其索引使用单独的卷]。您可以通过双工控制器获得更高的性能。
对于一些很好的“为什么不”指南,这在我合作过的 Oracle DBA 中一直很受欢迎......
对抗任何五人组的战斗 - http://www.miracleas.com/BAARF/
简短的回答:没有。
长答案:除非您的数据库非常小或要求非常低,否则不会。数据检索在很大程度上依赖于每秒的磁盘 I/O 操作,并且随着时间的推移,条带化的开销会耗尽您的磁盘访问,尤其是在长时间运行查询的情况下。大多数数据库在 RAID 10 样式设置上运行,或者使用保存数据分区的特定卷。是的,RAID 10 会花费您的写入成本,但您的读取性能(使用正确的设置)会大幅提升。
大型回写缓存。增加硬件 RAID 控制器上的 RAM 或软件 RAID 解决方案可用的 RAM(即,对于 Linux 的 MDADM,增加系统 RAM,MDADM 膨胀以使用其他未使用的系统 RAM 作为写入缓存)。该建议适用于给定的“大”值 - 如果您经常(5% 的时间?)以足够快的速度写入数据以填充写入缓存,无论它有多大,那么这将没有什么区别。
真正的是将您的数据文件、日志文件与您的操作系统文件分开。日志顺序写入数据会导致大量随机读取和一些随机写入
通过构建支持这些特性的 RAID 配置,您可以大大提高性能
Raid 1 - 镜像非常适合日志文件 Raid 10 适合您的数据文件。它还值得考虑将 TempbDB 和备份分离到单独的驱动器。添加文件组是提高性能的另一种方法。对于 SAN,这不是很清楚。这取决于您是为每个 LUN 构建特定的 RAID 配置还是依赖于心轴数量。
本着最近 StackOverflow 博客文章的精神,我们不应该重新提供 Internet 上已有的答案,我向您指出这一点
RAID-5 在提供的冗余方面并不是独一无二的,它只是做到了,同时消耗的额外磁盘比某些替代方案少。您可以选择具有相同或更好的冗余和更好的写入性能的其他东西