为了提高 SQL Server 的性能,我想使用我简单的 1 文件(1 个 mdf 和 1 个 ldf)数据库并将 mdf 文件(可能还有 ldf 文件)拆分到多个磁盘驱动器上。我认为最有效的方法是将大表分区到多个 mdf 文件中。(我打算只使用一个分区函数,它是主键的模数(它是一个 int 或 bigint),例如 (MyTable.Id % 8),其中 8 是我拥有的磁盘数)。
最快/最好/正确的方法是什么?例如,我需要执行哪些 SQL 命令或 SSMS 操作才能将我从现在的位置带到我想去的地方。
任何其他建议也将不胜感激。(通过存储空间组合驱动器看起来不像是一种选择,因为出于某种原因,当我这样做时,我并没有获得良好的写入 IOPS 性能。)
您不必涉及分区(但如果您有其他理由可以)。如果您创建一个包含您想要的物理文件的新文件组并在新文件组上重建索引,则足以将数据分布在这些物理文件中。
重建过程看起来像这样。假设当前索引具有以下定义:
你可以像这样重建它:
使用您在创建该索引时通常使用的任何其他选项(即 sort_in_tempdb、pad_index、online、resumable 等)。还要考虑更改现有索引的压缩设置是否有意义 - 您正在重写整个索引,所以现在是时候了!
最后,作为建议,我将在新文件组中的每个驱动器中至少创建两个文件。为什么?如果 8 个文件(大概 8 个驱动器)的 SWAG 不足以满足您的用例,则必须再次执行上述索引重建过程。但是如果你这样做了,比如说每个驱动器有两个文件(总共 16 个),你可以配置新的存储,并且只需执行文件系统文件复制(当数据库离线时)或指定新位置的恢复。其中任何一个都应该比重建索引更快。