我是一名热心的开发者 - 但是时不时地,客户没有一个像样的DBA来处理这些问题,所以我被要求决定....
在处理合理大小的SQL Server数据库(比Northwind或AdventureWorks更大的数据库)时,您的策略/最佳实践是什么? - 您使用多个文件组吗?如果是这样:多少?为什么?
您有什么标准来决定何时摆脱“一站式文件组”的做法:
如果您使用多个文件组,您使用了多少个?一个用于数据,一个用于索引,一个用于日志?数据的数量(多少)?您选择的原因是什么 - 为什么您使用的确切数量的文件组:-)
答案 0 :(得分:13)
Microsoft培训和最佳实践方法如下:
请记住,在存储数据时,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并位于不同的磁盘上,从而将每个读取发送到另一个磁盘,从而并行读取并减少冲突。