去除物理碎片

Dam*_*ods 2 sql-server storage fragmentation

如果我继承了当时已经增长到 400GB 1 MB 块的数据库。离线碎片整理是清除所有物理碎片的唯一方法。我遇到的另一个问题是数据和日志文件混合在错误的 RAID 驱动器上。

我可以通过备份数据库来用 1 块石头杀死 2 只鸟,删除它并使用 WITH MOVE 恢复它以将文件放在正确的 RAID 驱动器上。这会消除物理碎片吗?

Aar*_*and 5

不,备份/恢复将保留所有碎片。可能更好的是在新位置添加一个包含文件的文件组,并在新文件组上重新创建所有用户表(通过使用 DROP_EXISTING 重新创建索引,并在可能的情况下作为在线操作)。您将无法完全消除原始文件,但如果您移动了所有用户对象,您应该能够将主数据文件缩小为仅系统对象。

如果您随后想将主 MDF 文件和日志文件移动到新的 RAID 驱动器,您可以使用 ALTER DATABASE 执行此操作 - 使数据库脱机,更改单个文件位置,物理移动文件,然后使数据库重新联机.

  • 使数据库脱机并对文件运行文件系统碎片整理不会处理文件内部的碎片。我向您保证,如果您遇到性能问题,您要关注的是数据库中的碎片,而不是文件级碎片。 (2认同)