SQL Server 2005/2008 - 多个文件组?

时间:2009-02-13 06:16:48

标签: sql-server sql-server-2008 sql-server-2005 database-design filegroup

我是一名热心的开发者 - 但是时不时地,客户没有一个像样的DBA来处理这些问题,所以我被要求决定....

在处理合理大小的SQL Server数据库(比Northwind或AdventureWorks更大的数据库)时,您的策略/最佳实践是什么? - 您使用多个文件组吗?如果是这样:多少?为什么?

您有什么标准来决定何时摆脱“一站式文件组”的做法:

  • 数据库大小?
  • 数据库复杂性?
  • 可用性/可靠性要求?
  • 还有什么?

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

6 个答案:

答案 0 :(得分:13)

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

  • 日志文件放在单独的物理驱动器上
  • 数据文件放在单独的物理驱动器上
  • 多个文件组:当特定表格非常大时。通常情况下在事务数据库(Separate Physical Drive)中
  • 多个文件组:使用范围或想要将查找数据拆分为只读数据库文件时(单独的物理驱动器)

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

答案 1 :(得分:3)

至少 ONE 在SQL Server 2008中拥有多个(至少两个)文件组的正当理由:如果要使用FILESTREAM功能,则必须拥有专用的自定义文件组您的FILESTREAM数据: - )

马克

答案 2 :(得分:3)

维护多个文件组可帮助您减少I / O负担。它还允许您灵活地存储文件组,而不是单个文件,并将它们分成每个文件组的单个磁盘驱动器。

答案 3 :(得分:1)

通常,您应该只有一个主文件组和一个日志文件。

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

我从this blog post得到了这个想法。

HTH。

答案 4 :(得分:0)

我已经处理了很多数据库,而且我们唯一一次使用文件组的时候是磁盘空间不足,我们不得不在另一个主轴上创建一个新的文件组。我确信有很好的性能原因,为什么这不理想,但这就是现实。

答案 5 :(得分:0)

除了其他原因之外,如果要对表进行分区,其他文件组才有意义。如果存在许多与该表的不同where条件的可比较读取,则这是有意义的。您可以将每个分区配置为反映一个这样的where-condition并位于不同的磁盘上,从而将每个读取发送到另一个磁盘,从而并行读取并减少冲突。

相关问题