重建索引对 mdf/ldf 文件有影响 SQL Server 2008

rmd*_*ssa 6 performance index sql-server-2008

重建索引时使用了选项 'SORT_IN_TEMPDB = ON' 以避免不必要地增加用户数据库文件。

它到底是什么意思?

是否完成了完整的过程TempDB并且mdf/ldf文件大小不增加?

比如reindex之前(数据库处于简单恢复模式),数据库最大索引大小为25GB

  • .mdf 大小(已分配和使用 100GB --> 没有可用空间)
  • .ldf 大小 (20GB)
  • TempDB 有 200GB 可用空间

.mdf&.ldf文件的大概大小是多少。他们成长还是不成长?

Wor*_*DBA 6

重建索引时,数据库引擎会创建所谓的“中间排序结果”。这些中间结果就像组合成索引的块,创建这些块需要空间。如果可以,数据库引擎实际上会对内存中的索引进行排序;但如果不是,它会将中间结果存储在目标文件组中。

使用 SORT_IN_TEMPDB 选项要求 SQL Server 将这些中间结果存储在 TempDb 中,而不是在源数据库中重建它们。当 TempDb 与源数据库位于不同的磁盘上时,这有助于提高重建任务的性能并减少对数据库的性能影响。

重建索引的要求是您必须有足够的空间(无论您决定在何处构建索引)来保存数据库中最大的索引:在您的示例中为 25GB。其中,如果您使用 TempDb,您应该很容易拥有。

至于你的源数据库是否会增长,我不排除它,但它不会增长到任何地方,如果你重建其中的索引。如果您担心这一事实,那么请复制一份数据库并将其放入测试环境中并尝试一下——这是真正确定的唯一方法。

SORT_IN_TEMPDB:

http://msdn.microsoft.com/en-us/library/ms188281.aspx

我希望这可以帮助你。


Jon*_*gel 6

此选项仅控制从何处分配中间排序空间(而不是索引本身)。有关创建索引时如何使用的更深入描述,请参见此处tempdb

您仍然需要数据文件中有足够的可用空间来容纳索引的第二个副本,因为 SQL Server 必须在删除旧索引之前放置新索引(它不会就地覆盖)。

日志文件中所需的空间量取决于数据库的恢复模式。查看此博客文章以了解FULLBULK_LOGGED恢复模型之间的比较(SIMPLEBULK_LOGGED- 换句话说,最小日志记录相同)。