15

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

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

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

编辑:我们绝对希望生产服务器上的冗余,所以 RAID 0 本身就出来了。RAID 10 不错,但对我们来说可能有点贵。

4

10 回答 10

17

您使用独立 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 的基本不知情条带化,这是一个很棒的概念。

于 2008-10-03T02:32:49.087 回答
3

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

于 2008-10-03T23:57:48.923 回答
1

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

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

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

于 2008-10-03T02:05:37.450 回答
1

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

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

于 2008-10-03T02:14:39.397 回答
1

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

希望这可以帮助。

于 2008-10-03T23:37:17.687 回答
1

两件事情,

理论是 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 工作哪个更快。

于 2009-03-25T05:45:26.830 回答
0

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

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

于 2008-10-03T02:20:13.047 回答
0

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

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

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

于 2008-10-06T11:44:42.350 回答
0

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

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

于 2009-03-25T05:48:57.773 回答
0

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

于 2011-09-30T15:49:01.887 回答