碎片整理 - 重建索引 SQL Server 2005

Riv*_*vka 8 index sql-server maintenance fragmentation

我正在研究对数据库进行碎片整理,似乎我正在寻找以下 SQL 语句:

ALTER INDEX ALL ON mytablename
REBUILD WITH(ONLINE = ON)
Run Code Online (Sandbox Code Playgroud)

当我从 中提取信息时sys.dm_db_index_physical_stats,我看到百分比非常高 - 70%、80% 和 90% (!)。所以这告诉我我想要一个REBUILD,而不是一个REORGANIZE

在执行这些之前,我有几个问题REBUILDS

  1. 它可以在进程使用数据库时运行吗?(ONLINE = ON 告诉我是的,但我想确认它不会崩溃。)还是在不使用时运行更好?
  2. 我阅读REBUILD使事情运行得更慢。那是在重建索引的时候吗?(或永远之后)
  3. 重建所有索引/或每个索引需要多长时间?
  4. 是否有任何副作用或我需要注意的其他信息?这是生产/实时数据库。

编辑:最后,重建它的最佳方法是什么?循环遍历百分比大于 30 的所有对象?或者?

谢谢!

小智 7

  1. 是的,您可以在数据库与活动用户联机时重建。如果可能的话,最好在非高峰时段进行。
  2. 在重建期间,您的查询会运行得更慢,主要是由于重建索引的 I/O 开销。这有多明显取决于您的系统的具体情况。性能损失仅在重建期间 - 而不是永远。
  3. 同样,重建的持续时间取决于您的特定设置。您应该尝试在等效的开发或登台服务器上运行它。
  4. 没有其他相关的副作用。重建完成后,您将恢复正常运行。

  • 对于第 4 点,他应该意识到他的数据库在磁盘上占用的空间将大幅增加,因为它将需要容纳两个版本的重建索引。本质上,它会添加大小与他的最大索引相等的松弛空间。 (2认同)