SQL Server的最佳RAID设置

时间:2020-03-06 15:03:30  来源:igfitidea点击:

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

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

在此阶段,SQL Server应该将大部分数据库保留在RAM(8GB)中,但是它将不断增长,因此我不想完全依赖于此。

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

解决方案

由于读取比写入更多,因此RAID 5可以更快地处理数据文件。

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

编辑:我们将至少需要3个磁盘才能创建RAID 5阵列。

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

这意味着,如果我们想知道如何使用4个磁盘,例如,两个RAID1对应该比一个4磁盘RAID5阵列具有更好的性能。当然,从两个RAID1对中不会获得太多可用的存储。

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

否则,对于数据库服务器,RAID 1 + 0始终是一个不错的选择。

使用独立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的基本无提示条带化功能,这是一个很棒的概念。

鉴于数据库较小,我将使用四个15krpm 2.5" SFF SAS磁盘,设置为两个单独的RAID 1镜像。我将通过Adaptec 5805 PCI-e x 8 SAS控制器运行它们。为了安全起见,将数据存储在一个阵列上,而将另一个存储在日志上,可以防止内存映射整个数据库,超大型/昂贵的SAN或者使用SSD,我坚信这将是最快的安装方法。

希望这可以帮助。

我花一点时间来确保数据库得到有效索引。对其进行全表扫描监视,确保最频繁的查询读取的数据越少越好;我会在慢速磁盘设置上采用高效设计的数据库,而不是对SSD上的索引不正确的数据库进行高效的设计。

我还建议我们建立一组基准值,使我们不仅可以把手放在空中(或者询问StackOverflow,似乎在这两个概念上似乎有些奇怪,而且有些奇怪),从而可以做一些更有根据的预测。

使用一些基准值,我们还可以衡量更改的有效性,并为将来的升级打下良好的基础...

(如果不了解,请阅读一些有关性能工程的文献(或者维基百科)。这是处理此类问题的一整套内容)。

两件事情,

从理论上讲,RAID 1可为我们提供两个驱动器进行读取,但不要认为这相当于性能的两倍。实际上,事实并非如此,通常顺序读取速度最终与一个驱动器完全相同。令人惊讶,但确实如此。...进行真实世界的测试,不要依赖理论。

话虽如此,我会使用两个RAID 1 ...,但不像我们所说的那样,一个用于OS,另一个用于数据。我将在其中一个上有一些小的OS分区,但一定要对SQL Server进行两次突袭,以获取数据。为sql server提供所有设置。

SQL Server可以跨越两对,尽管这里有人说,我们绝对不希望使用0 + 1. 他们再次查看理论基准,而不是了解sql server可以在磁盘上对所有数据进行条带化,并且可以以优化的方式进行。

突袭1只是为了实现数据冗余...除此之外,还应尽可能多地分配给sql server,并让它做自己的事情...它非常擅长于其工作。

我们有一个0 + 1并将其分成两个RAID 1 ....进行真实世界的测试,我们会惊讶于SQL Server工作的速度更快。

顺便说一句,在我工作的地方,他们有一个高端san,在大约2分钟的时间内进行了表格扫描。我将驱动器分解为简单的RAID 1集,然后让sql server处理条带化...而不是san。 2分钟降至45秒。

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