如果我有一个默认填充因子为 100% 的索引,并且修改会导致大量内部碎片(页面拆分、可用空间等),从而导致许多页面最终达到 60% 左右,而不是 100%,那么索引重建/重新组织将数据压缩为更少的数据页,从而导致数据库中报告更多可用空间?
如果前面的情况成立,那么在执行收缩操作之前重新组织索引以最大化收缩所获得的空间是否有意义(在收缩之后进行另一次重新组织以减少收缩引起的碎片)?
最后,DBCC Shrinkfile 是否像重建一样压缩数据页,还是仅移动数据页?
如果我有一个默认填充因子为 100% 的索引,并且修改会导致大量内部碎片(页面拆分、可用空间等),从而导致许多页面最终达到 60% 左右,而不是 100%,那么索引重建/重新组织将数据压缩为更少的数据页,从而导致数据库中报告更多可用空间?
如果前面的情况成立,那么在执行收缩操作之前重新组织索引以最大化收缩所获得的空间是否有意义(在收缩之后进行另一次重新组织以减少收缩引起的碎片)?
最后,DBCC Shrinkfile 是否像重建一样压缩数据页,还是仅移动数据页?
索引维护的目的是减少索引碎片,而不是节省空间。但在其过程中,它需要利用几乎是索引大小两倍的可用空间来对其中的数据进行实际重组。因此有效的索引维护是浪费并且消耗更多的空间。
这也是一种操作浪费,而且几乎从来不需要。它很重,会导致资源争用,并且任何从中感知到的性能增益实际上都来自可以单独运行的辅助相关进程(统计更新和从缓存中清除查询计划)。
大不。收缩会导致索引重新碎片化,从而抵消您刚刚花费在索引维护上的大部分工作。他们彼此违反直觉。
此外,收缩是一项繁重的操作,也可能导致资源争用,因此不应使用。它仅适用于特殊的一次性情况。
以下是专家提供的一些相关资源:
是的。你是对的。
通常这是不值得付出努力的。
所有操作:收缩和重组都非常昂贵,因此“以防万一”运行它们是没有意义的。
它仅移动数据页。
从我的角度来看,你正在通过CPU、内存和网络带宽(更昂贵的)来争夺空间(现代数据库最便宜的资源)