Sql Server,“在释放未使用的空间之前重新组织文件”是更好还是更糟?

Die*_*oto 5 performance sql-server tuning

我找不到满意的答案。我完全理解“收缩”会导致索引碎片整理,这会降低性能。

但是,这不是减少碎片整理的选项吗?

那么,激活这个选项是好是坏?请不要增加我的困惑。我请你给我一个明确而简单的答案:要么更好,要么更糟。

然后如果你愿意,给我你的解释,我会很乐意阅读和欣赏。

在此处输入图片说明

Bre*_*zar 8

这相当于缩小。要证明这一点,请选中该框并单击顶部的“脚本”按钮以查看它生成的收缩命令。

一般来说,这也是一个很好的学习工具 - 每当您想了解 UI 中的某些内容时,请尝试使用该脚本按钮。

  • 好的。很好的建议。我做了脚本测试,结果是这个复选框只允许您编辑“收缩后文件中的最大可用空间”百分比并将其传递给 DBCC SHRINKDATABASE 函数。没有其他的。因此,最终可能的答案可能是:**不是更好,也不是更差。不要紧。它仅用于激活收缩后可用空间百分比的编辑。** (2认同)

小智 7

与现有答案相反,除了允许您指定大小之外,这确实对 SQL 进行了更改,如下面两个生成的脚本所示(至少在我的企业管理器版本 - SQL Server 2017 上)。

-- Checkbox Unchecked
DBCC SHRINKFILE (N'My_DB' , 0, TRUNCATEONLY)

-- Reorganise Checkbox Checked
DBCC SHRINKFILE (N'My_DB' , 48491)
Run Code Online (Sandbox Code Playgroud)

对于未选中的选项,TRUNCATEONLY应用它会阻止 SQL Server 执行任何数据重组。如果您想快速释放一些空间而不立即影响性能,那么这非常有用,但它会影响持续的性能,因为数据库将变得碎片化。

TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不在文件内执行任何页面移动。数据文件仅收缩到最后分配的范围。如果使用 TRUNCATEONLY 指定,则忽略 target_size。

参考:https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql ?view=sql-server-2017

太长了;(根据评论重写):

  • 重组可以允许释放额外的空间,而不仅仅是释放在数据库末尾分配的可用空间(仅在某些情况下这才是有益的)。
  • 重组可能会影响性能,直到该过程完成(使用 SSMS 界面执行此操作时会发出警告)
  • 重组会使你的索引碎片化,所以之后重建它们
  • 当数据库物理移动数据页时,重组可能会对短期性能产生影响。

  • 缩小“WITH TRUNCATEONLY”不会导致数据库更加“碎片化”。随着数据移动而缩小(没有“TRUNCATEONLY”)会使索引碎片化。选中重新组织文件框,因此缩小数据库文件只会对数据库产生负面影响。唯一积极的副作用是减小了大小,并且只有当文件不再增长时,这种副作用才是积极的。 (4认同)