我很少有索引高度碎片化(超过 90% 的碎片化)且大小足够大(数十 GB)的表。对这些进行碎片整理的目标是减少上述表格的空间消耗。
我想避免执行 REBUILD 操作,因为它太耗费资源。还试图避免记录到事务日志和日志增长,以及因此导致大的事务日志备份大小。
这就是为什么选择 REORGANIZE 操作而不是 REBUILD 来处理高碎片的原因。
关于 REORGANIZE,有以下问题:
如果同时在单独的索引上运行多个 REORGANIZE 操作(比如 10+,在单独的 SSMS 窗口/会话中) - 它会导致数据损坏或任何其他已知问题吗?
REORGANIZE 操作是否以任何方式/根本记录到事务日志?
REORGANIZE 持有什么样的锁?哪些查询会因此受到影响?
在我的案例中,进行碎片整理的唯一原因是减少存储空间消耗,它确实有帮助(例如索引之前是 18 GB,然后变成了 8 GB,等等)。就我而言,这比订购额外的存储空间更容易。
不,它不会。关于任何其他问题,如果您的 SQL Server 已修补到最新的 SP 和 CU,那么您应该非常安全。
是的,他们实际上记录在所有恢复模式中。引自SQLskills.com
再次引用上面分享的 Paul Randals 博客
请注意,如上所述,索引重组已完全记录,因此会生成日志,但由于 SQL 引擎一次只在一个数据库页面上工作,因此日志增长不会过度膨胀并且会受到控制。