SQL服务器的最佳RAID设置

时间:2008-10-03 02:01:34

标签: sql-server database performance hardware

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

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

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

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

10 个答案:

答案 0 :(得分:16)

使用独立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,这是一个很好的概念。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

鉴于Reads比Writees多得多,RAID5对于你的数据文件来说会更快。

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

考虑到数据库的小尺寸,我会使用四个15krpm 2.5“SFF SAS磁盘,设置为两个独立的RAID 1镜像。我将通过类似Adaptec 5805 PCI-e x 8 SAS控制器运行它们。我d将数据放在一个阵列上,将日志放在另一个阵列上以保证安全。棒内存映射整个数据库,一个非常大/昂贵的SAN或使用SSD我相信这将是最快的设置。< / p>

希望这有帮助。

答案 5 :(得分:1)

两件事,

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

话虽如此,我会选择两个RAID 1 ...但不是你说的,一个用于操作系统,另一个用于数据。我会在其中一个上有一些小的操作系统分区,但肯定会给sql server提供数据突袭。给你的SQL服务器所有的集合。

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

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

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

答案 6 :(得分:0)

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

否则,RAID 1 + 0始终是数据库服务器的理想选择。

答案 7 :(得分:0)

我还建议建立一组基线值,这样你就可以做一些更有根据的预测,而不仅仅是把手指放在空中(或者问StackOverflow,这两个概念看起来有点模糊和奇怪)。

使用一些基线值,您还可以衡量更改的有效性,并为将来的升级奠定良好的基础......

(如果不知道的话,可以选择一些关于性能工程的文献(或维基百科)。它是处理这类问题的整个分支。)

答案 8 :(得分:0)

顺便说一下,在我工作的地方,他们有一个高端的san,可以在大约2分钟内完成一次桌面扫描。我将驱动器分成简单的raid 1套,并让sql server处理条带化......而不是san。 2分钟降到45秒。

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

答案 9 :(得分:0)

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