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

如果Microsoft SQL Server 2008标准版服务器configuration如下,则选项1提供优于选项2的优势吗?

基本configuration:

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

选项1:

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

选项2

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

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

有人可能会build议常识是否存在,或者是否有理由忽略了为什么这会有利?

不知道是否有多个文件组的性能增强function,但是您可能会发现文件组中的多个文件会提高性能。

回顾一下我对这个问题的贡献: 为什么CPU在我们的8-CPU SQL Server框中使用如此不对称?

我们小心地将最常用的表设置为文件组,其中包含多个文件。 其中一个增强的性能是SQL将请求发送到文件组中的每个文件 – 所以如果BigOverUsedTable在FileGroup1上,而FileGroup1在其中有四个文件,而你的数据库有8个内核,它实际上会使用四个内核来做“select大数字从BigOverUsedTable嘎吱嘎吱的查询“ – 而否则,它将只使用一个CPU。 我们从这个MSDN文章中得到了这个想法:

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

从TFA:

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

由于此build议,我们在8核心机器上的文件组中有四个文件。 它工作得很好。

你将得到的唯一的好处是操作系统将在Windows中有两个物理磁盘队列,而不是一个,并且你将准备添加另一个数组并将来将数据库文件移动到它。 两者都是相当小的好处。

如果你有时间,那么你总是可以试试看,而不是猜测!

我没有看到2个虚拟磁盘超过1个虚拟磁盘的性能增益,但是有额外的文件和文件组总是有利于未来的打样。

把你的索引放在一个单独的文件组中是很好的做法,那么你总是可以将文件组移动到一组新的主轴上,以获得额外的性能提升!

不会有任何可测量的速度优势,但正如其他人所指出的那样,拥有两个文件组是一个更有前途的未来概念。

您的两个选项只是没有提供任何好处,因为在两种configuration中,I / O只会散布在所有物理磁盘周围。

如果你有4个物理磁盘,并且你真的想从它们(*)中获得最大的可能的性能,那么下面是如何做到的:

  • 创build2个RAID 1arrays,每个arrays使用2个磁盘。
  • 在每个arrays上创build一个卷。
  • 在每个卷上创build一个文件组。
  • 优化您的数据库以获得最大的并行性。

最后一点是最重要的一点; 通过这个configuration,你可以使两个文件组有效地并行工作,但是如果你可以把你的数据放在那里,这样就可以同时对它们进行I / O操作, 所以你可以把不同的表放在不同的文件组上,或者把它们中的一个用于表,另一个用于索引,或者……你有无穷无尽的解决scheme,这一切都取决于你的实际工作量。

(*)这实际上是一种高级优化,在大多数情况下它只是矫枉过正,因为单个文件组/单个卷/单个数组的pipe理将会简单得多,并且会达到非常类似的性能,除非实际上可以并行化I / O 。

选项2很可能导致驱动器磁头更多的物理移动,因为它们需要在两个逻辑磁盘之间来回切换。 这可能会也可能不会抵消单独磁盘队列获得的任何优势。 只有使用您的环境的testing才能得出确凿的结果。