在 SQL Server 中,何时应该将 PRIMARY Data FileGroup 拆分为辅助数据文件?

Jar*_*xon 11 files groups sql-server

我们的数据库目前只有一个 FileGroup,PRIMARY,它包含大约 8GB 的​​数据(表行、索引、全文目录)。

什么时候是将其拆分为辅助数据文件的好时机?我应该注意哪些标准?

Bre*_*zar 20

这个问题有两个部分:何时添加新的 FILEGROUP,以及何时在文件组中添加新的 FILE。先说理论:

马克关于性能的主要原因是正确的。

第二个原因是灾难恢复。使用 SQL Server 2005 和更新版本,您可以进行文件组还原。当灾难发生时,您可以先只恢复主文件组,然后将数据库部分联机以进行查询。用户可以在您还原其他文件组时运行查询。这对于具有大量可能不需要立即使用的历史数据的数据库或需要将数据加载到当前表中而不需要访问历史数据的数据仓库非常有用。

另一个原因是数据组的读/写配置文件。如果您有一些不断写入的数据,以及其他读取活动频繁的数据,您可以构建不同类型的存储来满足这些需求。你可以把重写的东西放在raid 10上,把偏读的东西放在更便宜的raid 5上。

现在,让我们谈谈文件与文件组。在 SQL Server 中放置对象时,必须将它们放置在文件组级别。您可以在文件组中放置表或索引,但不能选择特定文件。到目前为止,我们讨论的所有内容都是关于何时添加文件组——但何时添加文件?

如果您正在设计存储,并且您有 80 个硬盘驱动器,则可以通过以下几种方式将其拆分:

  • 1 个 80 个驱动器池
  • 两个 40 个驱动器池
  • 四个 20 个驱动器池,等等...

不同的存储子系统具有不同的性能配置文件。我曾使用过一些在 12-16 个驱动器阵列上表现最佳的 SAN,但比这更大的任何东西都没有性能提升。另一个例子是具有多路径的 SAN:如果您有多个 HBA 将您的服务器连接到您的存储,并且如果您的多路径软件不是真正的主动/主动,那么您可能需要每个路径一个阵列来分配负载。四个路径、四个驱动器池将在这些类型的驱动器上获得更好的性能。

在这些情况下,您最终会在 Windows 下拥有四个不同的阵列、四个不同的驱动器(除非您使用挂载点,即便如此,它也是不同的文件夹)并且您将需要在 SQL Server 中使用四个单独的文件。这些单独的文件可以在同一个文件组中。


Mar*_*sen 6

主要原因是性能。当主文件组磁盘驱动器上的 IOPS 容量用完时,您需要扩展到第二个文件组以根据存储配置将 IOPS 拆分到多个磁盘/LUN。

编辑:Brad Wilson 对 SSD 发表了很好的评论。如果您使用的是复合 SSD/SATA/FC 存储系统,您可能希望在不同类型的存储上拥有不同的文件组。然后,您可以将您的极端 IOPS 要求表放在 SSD 文件组上,而历史/统计表可以存储在廉价的 SATA 文件组中。

  • SSD 有机会在我们考虑拆分数据的方式上发生巨大变化,因为它们的超低延迟使它们饱和变得更加困难。 (2认同)