1

我即将构建一个新的 SQL Server,并计划广泛使用文件组。我预计这台服务器上的 5 个不同数据库会出现大幅增长,并且会大量读取/写入。我计划在每个数据库上创建 2 个额外的文件组(一个用于用户数据,一个用于索引),每个数据库总共创建 3 个文件组。我计划在不同的驱动器/主轴之间拆分文件组。此服务器是 EMC SAN 上的虚拟服务器 (VMWare)。我是 SAN 架构的新手,我不是 SAN 管理员。我在“Microsoft SQL Server 2012 Unleashed”一书中读到了关于文件组和 SAN 的简短说明,即文件组在使用 SAN 时可能无关紧要。不幸的是,没有比这更多的细节了,我在这个话题上也没有找到太多其他的东西。

使用 SAN 进行存储时是否需要使用文件组?

如果不是,那为什么不呢?如果是这样,那为什么?

我可以就这个主题向我的 SAN 管理员提问什么问题?

4

1 回答 1

2

您需要了解的是 SAN 是什么。

SAN 是一个或多个存储阵列,通过光纤通道网络互连。您的主机有特殊的网卡 - 称为主机总线适配器 (HBA) - 用于与该网络通信。网络协议专为存储流量而设计,因此非常适合高性能、低延迟的流量。

您正在与之交谈的阵列...嗯,它的功能差异很大。即使是您所指的 EMC SAN,也可能是各种 EMC 产品作为存储阵列。它们的主要目的是巩固存储性能。

从与 10 个服务器共享 100 个主轴中获得的峰值性能比每台服务器都有 10 个主轴时更好。因此,您的存储阵列基本上所做的就是将 100 个主轴分割成逻辑单元,然后将它们返回给您的主机,这样每台主机的平均性能大致相同,但其峰值是大小的 10 倍。(或者更现实地说,它们可能配备 50 个锭子,因为这样您可以获得峰值的 5 倍,但成本降低了一半,以换取较低的平均值)。

现在 - 文件组。据我了解(作为存储工程师,而不是了解大量 SQL)。文件组允许您管理数据的放置,特别是底层存储。

这是一个棘手的问题 - 因为它取决于。通常,您的存储阵列会自己做一些非常聪明的事情,以简化数据放置和吞吐量。诸如一些非常激进的缓存之类的东西——远远超过你在普通主机上获得的——这意味着你的很多随机访问工作负载都是以“RAM 速度”而不是“磁盘速度”进行的。它也可能比您通常预期的要多得多的纺锤。

据我所知,这基本上是文件组旨在实现的目标 - 您手动将文件放在磁盘上,并让 SQL 处理这些磁盘的并行 IO。您的存储阵列已经在为您执行此操作,充其量您会让自己不必要的管理员头疼,最坏的情况您实际上会使阵列端优化变得更糟。

您可能仍然希望隔离各种内容类型,但我建议您通过从 SAN 分配的不同 LUN 来实现。更重要的是,您不能通过填充另一个数据库来耗尽一个数据库的空间 - 但在拍摄快照或克隆时它也允许更多的灵活性。

我的建议是:

  • 与您的存储人员讨论您的数据库的预期 IO 配置文件。(IO 是 SAN 上昂贵的东西,通常数据库比“普通”应用程序使用更多)
  • 将每个实例放在一组不同的 LUN 上 - 将数据库、日志和 tempdb 分开。
  • 在 vmware 中,您最终可能会在同一数据存储上使用“逻辑”磁盘。如果性能至关重要,则可能值得通过 SAN LUN 直接到达主机。

然后不要过分担心它 - 如果您发现特定问题,应该可以重新调整/移动各个 LUN 以改善情况。

于 2014-10-06T12:10:21.687 回答