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


11

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

何时将其拆分为辅助数据文件?我应该注意哪些标准?

Answers:


20

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

马克(Mark)认为最重要的原因是表现。

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

另一个原因是数据组的读/写配置文件。如果您有一些数据要不断写入,而其他数据却需要大量读取活动,则可以构建不同类型的存储来满足这些需求。您可以将大量写入的内容放到突袭10中,而将偏读的内容放到更便宜的突袭5中。

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

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

  • 一池80个驱动器
  • 两个40个驱动器池
  • 四个20个驱动器等的池...

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

在这种情况下,您最终将得到四个不同的阵列,Windows下的四个不同的驱动器(除非您使用安装点,甚至是不同的文件夹),并且SQL Server中将需要四个单独的文件。这些单独的文件可以在同一文件组中。


1
是的,对收益进行现场分析。我要添加的唯一一件事是,您还可以经常将索引从频繁访问的表中卸载到它们自己的主轴/文件组中,以提高异步/预读性能。在少数情况下,我已经完成了一些较大的部署,并帮助公司节省了成千上万美元的SAN厂商发誓要获得所需吞吐量所需的硬件成本。
Michael K Campbell,2009年

6

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

编辑:布拉德·威尔逊(Brad Wilson)对固态硬盘发表了很好的评论。如果您使用的是复合SSD / SATA / FC存储系统,则可能希望在不同类型的存储上具有不同的文件组。然后,您可以将IOPS极限要求表放到SSD文件组中,而历史记录/状态表则可以存储在便宜的SATA文件组中。


2
考虑到由于超低延迟而使其饱和的难度变得更大,SSD有机会以我们认为的数据拆分方式进行巨大改变。
布拉德·威尔逊,

确实,好点!
马克·拉斯穆森

1

我还要指出,这个问题还有可恢复性/数据可用性方面。通过使用多个文件组,而不在主文件组上放置任何用户定义的对象,您可以更灵活地启用联机还原。这允许在文件组级别进行零碎还原。

2005年之后的SQL Server企业版和开发人员版中提供了联机还原

想到的另一个想法是将只读静态参考数据与事务数据分开。对于较大的数据库,这可以减少执行备份所需的时间和/或空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.