SQL Server:仅用于系统表的文件组?

gbn*_*gbn 12 sql-server filegroups disk-structures

我们的企业标准之一是为用户表/索引使用单独的文件组/文件。这被设置为默认值,因此无需限定 CREATE TABLE 语句。

所以它看起来像这样

  • fileid 1 = 系统表,MDF
  • 文件 ID 2 = t-log = LDF
  • fileid 3 = 用户资料 = NDF

这里的任何人都可以帮助我理解为什么强制执行此操作的原始理由吗?


我会坦白说我认为这是巫毒教。上午错了......?

编辑:我知道如何使用文件组来分离索引/分区/存档,以及如何逐步恢复。这个问题是关于在同一卷上为系统表使用单独的文件组。

mrd*_*nny 12

这不是性能提升,而是可恢复的收益。如果系统表中发生文件损坏,则数据库将丢失。如果您将用户数据保存在一个单独的文件组(或多个组)中,那么您可以只恢复那些在恢复期间保持数据库其余部分在线的文件(假设这里是企业版)。

如果这就是他们声明的原因,我不能说,但这将是拥有多个文件组的好处,其中只有主文件组中的系统对象。

但是,您应该在垃圾中说应该启用 AutoShrink。


小智 10

Microsoft 的 70-432 培训书说“不将任何对象放在主文件组中的主要原因是在 I/O 中提供尽可能多的隔离。系统对象中的数据不会像数据那样频繁更改在您的对象中。通过最大限度地减少对主数据文件的写入活动,您可以减少由于硬件故障而引入损坏的可能性。此外,由于主文件组的状态也决定了数据库的状态,因此您可以提高可用性的数据库我最大限度地减少了对主文件组所做的更改。”

所以,随你便吧。其他人说这在某些情况下没有必要,当然更需要维护。只是想我会提供微软的推理。