SQL Server 2005/2008 - 多文件组?

13

我本质上是一名开发人员,但有时候客户没有合适的数据库管理员来处理这些问题,所以他们叫我来决定……

在处理相当大小的SQL Server数据库(任何大于Northwind或AdventureWorks的内容)时,你采用什么策略/最佳实践?是否使用多个文件组?如果是,要使用多少个?为什么?

在决定何时放弃“一切都使用一个文件组”的方法时,您的标准是什么:

  • 数据库大小?
  • 数据库复杂性?
  • 可用性/可靠性要求?
  • 还有其他吗?

如果您使用多个文件组,那么您会使用多少个?一个用于数据,一个用于索引,一个用于日志?若干个(多少个)用于数据?您选择的原因是什么-为什么要使用那个确切的文件组数量 :-)

6个回答

13

微软培训和最佳实践方法如下:

  • 将日志文件放置在单独的物理驱动器上
  • 将数据文件放置在单独的物理驱动器上
  • 多个文件组:当特定表格非常大时。通常在事务性数据库中使用(单独的物理驱动器)
  • 多个文件组:当使用范围或希望将查找数据拆分成只读数据库文件时(单独的物理驱动器)

请记住,MDF在存储数据方面从技术上类似于硬盘分区。 MDF是随机读取文件,而LDF是按顺序读取的文件。 因此,将它们拆分为单独的驱动器会导致巨大的性能提升,除非运行固态硬盘,在这种情况下仍然存在收益。


3

维护多个文件组有助于减轻I/O负担。它还允许您在备份文件组时轻松地进行存储灵活性,而不是备份单个文件,并将它们分别放置到每个文件组的独立磁盘驱动器中。


3

在 SQL Server 2008 中,拥有至少两个文件组有至少一个好处:如果您想要使用 FILESTREAM 功能,则必须为 FILESTREAM 数据拥有专用和自定义的文件组 :-)

Marc


1

通常情况下,您应该只有一个主文件组和一个与之对应的日志文件。

有时,当您拥有非常静态的数据时,可以创建一个包含此静态数据的第二个文件组。然后,您可以将文件组设置为只读,从而提高性能。毕竟,这是相当静态的数据。如果您具有较少的只读行(例如查找表值),则不值得。但对于某些内容(例如仍然可以阅读的归档内容),这可能是一个很好的选择。

我从这篇博客文章中得到了这个想法。

希望对您有所帮助。


0

另外一个使用额外文件组的原因是,如果您想要对表进行分区,这将是有意义的。如果该表存在许多具有不同 where 条件的竞争读取,则可以配置每个分区以反映其中一个 where 条件,并位于不同的磁盘上,从而将每个读取发送到另一个磁盘,实现并行读取和减少冲突。


0

我曾经涉及过各种数据库,但我们只有在磁盘空间不足时才使用文件组,并在另一个磁盘上创建了新的文件组。我相信这并不是最理想的做法,因为可能存在性能问题,但那是现实情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接