在一个 RAID 10 上使用两个文件组

在一个 RAID 10 上使用两个文件组

如果 Microsoft SQL Server 2008 标准版服务器配置如下,选项 1 是否比选项 2 更有优势?

基本配置:

  • 32GB 内存
  • 2 个 Xeon 7460(6 核)
  • Windows Server 2008 标准版 SP2
  • Microsoft SQL Server 2008 标准版 SP1
  • 2 x 146GB 15K RPM HDD(RAID 1)(用于操作系统)
  • 2 x 146GB 15K RPM HDD(RAID 1)(用于日志)
  • 4 x 146GB 15K RPM HDD,RAID 10(用于数据)

选项1:

在 RAID 10 上配置一个虚拟磁盘并使用一个文件组

选项 2

在 RAID 10 上配置两个虚拟磁盘并使用两个文件组

常识告诉我,不会有速度优势,因为 RAID 10 仍然只能以相同的速度进行读写。

有人能否建议这是否符合常识,或者我是否忽略了为什么这样做有利?

答案1

不确定多个文件组是否会增强性能,但您可能会发现文件组上的多个文件将提高性能。

回顾我对这个问题的贡献: 为什么我们的 8-CPU SQL Server 机器上的 CPU 使用率如此不对称?

我们小心地将我们最常用的最大表设置为包含多个文件的文件组。这样做的一个性能增强是,SQL 将对文件组中的每个文件进行线程请求 - 因此,如果 BigOverUsedTable 在 FileGroup1 上,并且 FileGroup1 中有四个文件,并且您的数据库有 8 个核心,它实际上将使用四个核心来执行“从 BigOverUsedTable 中选择大数字运算讨厌的查询” - 否则,它只会使用一个 CPU。我们从这篇 MSDN 文章中得到了这个想法:

http://msdn.microsoft.com/en-us/library/ms944351.aspx

来自TFA:

“文件组使用并行线程来改善数据访问。当按顺序访问表时,系统会为每个文件并行创建一个单独的线程。当系统对具有四个文件的文件组中的表执行表扫描时,它会使用四个单独的线程并行读取数据。通常,在单独的磁盘上使用多个文件可以提高性能。文件组中的文件太多可能会导致过多的并行线程并造成瓶颈。”

根据这个建议,我们在 8 核机器上的文件组中有四个文件。效果很好。

答案2

您获得的唯一好处是操作系统在 Windows 中将拥有两个物理磁盘队列,而不是一个,并且您将来可以添加另一个阵列并将数据库文件移至该阵列。 这两个好处都很小。

答案3

如果您有时间,那么您可以随时尝试一下,而不是猜测!

我没有看到 2 个虚拟磁盘比 1 个虚拟磁盘有任何明显的性能提升,但拥有额外的文件和文件组对于未来的防护总是有好处的。

将索引放在单独的文件组中是一种很好的做法,然后您可以随时将文件组移动到一组新的主轴上以获得额外的性能提升!

答案4

您的两个选项不会带来任何好处,因为 I/O 将分散在两种配置的所有物理磁盘上。

如果您有 4 个物理磁盘,并且确实希望从它们获得最大可能的性能 (*),请按以下步骤操作:

  • 创建 2 个 RAID 1 阵列,每个阵列使用 2 个磁盘。
  • 在每个阵列上创建一个卷。
  • 在每个卷上创建一个文件组。
  • 优化数据库以实现最大程度的并行性。

最后一点也是最重要的一点;通过这种配置,您可以让两个文件组有效地并行工作,但这只有当您能够以允许同时对它们两个进行 I/O 的方式将数据放入其中时才有用;因此,您可以将不同的表放在不同的文件组上,或将其中一个用作表,另一个用作索引,或者......您有无数的解决方案,这完全取决于您的实际工作量。

(*)这确实是一种高级优化,在大多数情况下,这只是矫枉过正,因为单个文件组/单个卷/单个阵列的管理会简单得多,而且会达到非常相似的性能,除非你真的并行化你的 I/O。

相关内容