【问题标题】:Optimal RAID setup for SQL serverSQL 服务器的最佳 RAID 设置
【发布时间】:2010-09-14 23:44:21
【问题描述】:

我们的网站有一个 SQL 2005 数据库后端,目前大小约为 10GB。虽然我没有确切的统计数据,但读取比写入多得多。

我们正在升级我们的数据库服务器,我正在考虑获取 4 个磁盘并将它们设置在两个 RAID 1 阵列中 - 一个用于数据文件,另一个用于操作系统和日志文件。这是最佳设置还是 RAID 5 更适合数据文件? RAID 10 有点贵,对我们来说可能有点过头了。

在这个阶段,SQL Server 应该将大部分数据库保留在 RAM (8GB) 中,但它会增长,所以我不想完全依赖它。

编辑:我们肯定希望在生产服务器上实现冗余,因此 RAID 0 本身已不存在。 RAID 10 不错,但对我们来说可能有点贵。

【问题讨论】:

    标签: sql-server database performance hardware


    【解决方案1】:

    您使用独立 RAID 1 镜像的概念是正确的策略。

    我们在我的工作中实现了类似的场景,并且效果很好。

    RAID 1

    RAID 1 为您提供 1 个磁盘用于写入但 2 个磁盘用于读取的速度。

    当您将数据写入 RAID 1 阵列时,它必须将该数据写入两个磁盘,因此您不会获得任何性能提升,但这是您获得数据安全性的地方。

    当从 RAID 1 阵列读取时,控制器将从两个磁盘读取,因为它们具有相同的数据。

    RAID 5

    这对于保护大量数据很有用。对于相同数量的数据,RAID 5 的成本增加比 RAID 1(或 RAID 0+1,一旦您的容量超出单个磁盘的大小)慢很多。

    如果您想使用 RAID 5 保护 600gb,您可以使用 4x200gb 驱动器或 3x300gb 驱动器来实现,需要 800-900gb 的总购买驱动器空间。 RAID 1 将是 2x600gb 驱动器,需要 1,200gb 购买空间(600gb 驱动器相当昂贵)或 RAID 0+1 允许您使用更便宜的容量驱动器(即:4x300gb 或 6x200gb)但仍然需要总共 1,200gb购买空间。

    RAID 0+1

    提供与 RAID 1 类似的优势,通过跨磁盘条带化将其提升了一个档次。我假设如果您担心更高的同时读取,您还将使用多处理器/多核。您将一次处理多个查询,因此条带化不会有太大帮助。对于使用大数据文件的单个应用程序(例如视频编辑),您会发现 RAID 0+1 具有更好的优势。

    当我前段时间为一位客户研究同样的问题时,我发现这篇文章非常有趣http://blogs.zdnet.com/Ou/?p=484。在第二页上,他讨论了从 RAID 0+1 到独立 RAID 1 阵列的变化,这带来了很多性能改进。这是一个更大的规模(20 个磁盘和 16 个磁盘 SAN),但概念相同。 SQL Server 能够对多个卷之间的数据进行负载平衡,而不是仅使用 RAID 0+1 的基本不知情条带化,这是一个很棒的概念。

    【讨论】:

    【解决方案2】:

    我会花一点时间来确保您的数据库得到有效索引;监视它的全表扫描,确保最频繁的查询读取尽可能少的数据;我会在一个慢速磁盘设置上使用一个高效设计的数据库,而不是一个在 SSD 上索引不正确的数据库。

    【讨论】:

      【解决方案3】:

      鉴于读取次数多于写入次数,RAID 5 会更快地处理您的数据文件。

      如果可能,请为事务日志文件使用单独的 RAID 1+0 阵列。

      编辑:您将需要至少 3 个磁盘来创建 RAID 5 阵列。

      【讨论】:

      • 但是你会从 5 个磁盘中获得更好的产量,更不用说更好的读取时间了。获得具有超大缓存的顶级硬件 RAID5 控制器,您将永远不会注意到 RAID5 的写入速度比单个磁盘慢,而读取速度则无法超过 5 个主轴。我同意用于日志的 RAID10。
      【解决方案4】:

      请注意,关键性能指标将是搜索速率,而不是数据速率。也就是说,一个典型的磁盘绑定数据库(随着它的增长可能会变成你的数据库)将受到磁盘每秒可以支持多少 IO 的限制,而不是它们可以支持顺序读取的最大数据速率。

      这意味着如果您想知道如何使用 4 个磁盘(例如),两个 RAID1 对应该比一个 4 磁盘 RAID5 阵列提供更好的性能。当然,您不会从两个 RAID1 对中获得尽可能多的可用存储空间。

      【讨论】:

        【解决方案5】:

        鉴于数据库较小,我将使用四个 15krpm 2.5" SFF SAS 磁盘,设置为两个单独的 RAID 1 镜像。我将通过 Adaptec 5805 PCI-e x 8 SAS 控制器之类的东西运行它们。我' d 将数据放在一个阵列上,将日志放在另一个阵列上以确保安全。条形内存映射整个数据库、非常大/昂贵的 SAN 或使用 SSD 我非常相信这将是最快的设置。

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:

          两件事,

          理论上是 RAID 1 为您提供两个驱动器用于读取,但不要认为这等于性能的两倍。事实上,它没有,通常顺序读取速度最终与一个驱动器完全相同。令人惊讶,但真实......做真实世界的测试,不要依赖理论。

          话虽如此,我会使用两个 RAID 1...但不像你说的那样,一个用于操作系统,另一个用于数据。我会在其中一个上有一些小的 OS 分区,但肯定会将两个 raid 都交给 sql server 以获取数据。给sql server所有可以的集合。

          SQL Server 可以跨对进行条带化,尽管这里有人说,你绝对不想使用 0+1。他们再次查看理论基准,不了解 sql server 可以跨磁盘条带化所有数据,并且可以以优化的方式这样做。

          Raid 1 只是为了数据冗余......除此之外,尽可能多地给 sql server,让它做它的事情......它非常擅长它的工作。

          你有一个 0+1 并把它分成两个 raid 1....做真实世界的测试,你会惊讶于 sql server 工作哪个更快。

          【讨论】:

            【解决方案7】:

            如果您使用具有大量电池支持的高速缓存 RAM 的硬件控制器,RAID 5 会很好。选择块大小并配置 DB,使条带大小(数据磁盘 * 块大小)等于 DB 写入大小。确保您的数据分区[对齐/是条带大小的倍数]。

            否则,RAID 1+0 始终是 DB 服务器的不错选择。

            【讨论】:

              【解决方案8】:

              我还建议建立一组基线值,让你们都可以做一些更有根据的预测,而不仅仅是把手指放在空中(或者问 StackOverflow,这两个概念似乎模糊而奇怪地相似)。

              通过一些基准值,您还可以衡量更改的有效性,并为未来的升级奠定良好的基础...

              (如果不知道,请查阅一些关于性能工程的文献(或维基百科)。这是处理这类问题的一个完整分支)。

              【讨论】:

                【解决方案9】:

                顺便说一句,我工作的地方,他们有一个高端的 san,大约 2 分钟就可以完成一次表扫描。我将驱动器分成简单的raid 1 组,让sql server 处理条带化……而不是san。 2 分钟缩短到 45 秒。

                网上还有其他关于这个的文章......很难让“真正的信徒”接受这个,这就是为什么我如此强调这一点。

                【讨论】:

                • 您知道,大多数 SAN 软件都有选择数据库高性能模式的选项。你只需要找到它们。有些甚至具有旨在与 Oracle 和其他人一起使用的预测读取。
                【解决方案10】:

                我更喜欢我已经在我的戴尔 r210-II linux 服务器上配置的 raid 10。惊人的表现...

                【讨论】:

                  猜你喜欢
                  • 2010-12-07
                  • 2016-10-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-06-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多