AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 918
Accepted
Scott Saad
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 11 个回答
  • 13743 Views

11 个回答

  • Voted
  1. 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 提供更多的安全性。

    • 23
  2. 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 处理期间完成大量工作。但是,磁盘上的成本节省可能相当小。

    • 22
  3. 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 提供更高的容量、良好的读取性能但较差(大)写入性能。

    • 3
  4. mikl
    2009-05-01T06:55:09+08:002009-05-01T06:55:09+08:00

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

    此外,如果您的应用程序对正常运行时间至关重要,我可能会建议使用两台具有复制功能的数据库服务器,主-主或热备用或其他。RAID 仅有助于防止磁盘故障,但服务器上可能出现的问题还有很多 :)

    • 3
  5. ninegrid
    2009-05-01T07:15:57+08:002009-05-01T07:15:57+08:00

    RAID 1,这是我的最终答案

    原因:

    镜像对为故障磁盘提供足够的冗余,并且 RAID 继续运行到最后一个磁盘。

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

    • 2
  6. Mark Regensberg
    2009-05-02T07:47:38+08:002009-05-02T07:47:38+08:00

    对于一些很好的“为什么不”指南,这在我合作过的 Oracle DBA 中一直很受欢迎......

    对抗任何五人组的战斗 - http://www.miracleas.com/BAARF/

    • 2
  7. Avery Payne
    2009-05-02T14:32:34+08:002009-05-02T14:32:34+08:00

    简短的回答:没有。

    长答案:除非您的数据库非常小或要求非常低,否则不会。数据检索在很大程度上依赖于每秒的磁盘 I/O 操作,并且随着时间的推移,条带化的开销会耗尽您的磁盘访问,尤其是在长时间运行查询的情况下。大多数数据库在 RAID 10 样式设置上运行,或者使用保存数据分区的特定卷。是的,RAID 10 会花费您的写入成本,但您的读取性能(使用正确的设置)会大幅提升。

    • 2
  8. 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% 的时间?)以足够快的速度写入数据以填充写入缓存,无论它有多大,那么这将没有什么区别。

    • 1
  9. CPU_BUSY
    2009-05-02T20:37:53+08:002009-05-02T20:37:53+08:00

    真正的是将您的数据文件、日志文件与您的操作系统文件分开。日志顺序写入数据会导致大量随机读取和一些随机写入

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

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

    • 1
  10. The Archetypal Paul
    2009-05-01T06:48:09+08:002009-05-01T06:48:09+08:00

    本着最近 StackOverflow 博客文章的精神,我们不应该重新提供 Internet 上已有的答案,我向您指出这一点

    RAID-5 在提供的冗余方面并不是独一无二的,它只是做到了,同时消耗的额外磁盘比某些替代方案少。您可以选择具有相同或更好的冗余和更好的写入性能的其他东西

    • 0

相关问题

  • 用于 Windows 和 Linux 的 ICH9R 上的 RAID 配置和 3xHDD

  • 上线的第一天:如何不杀死您的网站

  • IIS 优化

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

  • RAID 控制器通常是否存在 SATA 驱动器品牌兼容性问题?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve