SQL Server 分区与单独文件组上的索引

SPE*_*109 6 sql-server

我正要开始练习重新组织分区表,我一直在寻找最佳实践或建议。

假设我有 10 亿行表和 8 个逻辑磁盘可用于该表。

我的问题是,创建一个将数据划分为 8 个文件组并使索引存储与数据对齐的分区方案是否更好...

或者最好为数据创建 4 个文件组,为索引创建 4 个文件组(未对齐),然后将每个文件组放在一个逻辑磁盘上?

欢迎任何建议或意见。

Rem*_*anu 6

首先也是最重要的:这些逻辑磁盘最好由至少 8 个不同的物理磁盘支持。如果您要对在同一物理存储(相同轴)上创建的 8 个逻辑磁盘进行负载平衡,那么您就是在浪费时间。

最好的(也是最简单的!)选项是创建一个包含 8 个文件(大小相等且预生成)的单个文件组,每个文件都在一个主轴上,然后将表和索引放在这个文件组中。SQL Server 将在文件之间平均平衡数据。

分区是 ETL 切入和切出的功能。它不应该用于性能,因为您可以希望与原始表具有相同的性能。为了提高性能,请使用设计良好的聚集索引,该索引与典型负载相匹配。

如果您的数据真的是预先知道的,并且索引使用特性非常好理解,那么您可以尝试在它们自己的文件组上明确地平衡它们。但是试图通过手动控制来解决这个问题更有可能造成伤害而不是好处。具有 8 个文件的单个文件组的更简单选项在 99% 的情况下比手动显式控制更好地平衡 IO。

  • 还有一些其他优点不容忽视。例如,您可以将历史数据放在一个专用分区中,然后只在该分区上使用压缩,而不会损害存储在另一个分区中的当前数据的写入性能。但是,如果您只是想在磁盘上均匀分布 I/O,那么这可能不是这样做的方法。 (4认同)
  • 我知道了。单独的分区维护/压缩是一个很好的分区理由。我仍然会使用 1 个单个文件组,该文件组中的所有分区的分区方案,以及文件组中的 8 个文件分布在 8 个逻辑磁盘上。IE。让 SQL Server 在所有磁盘上均衡负载 IO 和表/索引布局。如果您想以更高的粒度(特定磁盘上的特定分区)进行微调,则需要更多的数据,而只有您拥有这些数据。 (3认同)