重建索引时,有一个用于ONLINE=OFF
和ONLINE=ON
的选项。我知道当ONLINE
模式打开时,它会复制索引,将新的查询切换到使用它,然后重新构建原始索引,使用版本控制跟踪对两者的更改(如果我错了,请纠正我)。
但是SQL在脱机模式下做什么呢?
发布于 2011-06-11 02:21:25
在联机模式下,新的索引被构建,而旧的索引可以被读和写访问。对旧索引的任何更新也将应用于新索引。反物质列用于跟踪更新和重建之间可能的冲突(即,删除尚未复制的行)。参见Online Index Operations。该过程完成后,该表将被锁定一段时间,新索引将替换旧索引。如果索引包含LOB列,则SQL Server 2005/2008/R2不支持联机操作。
在脱机模式下,对于任何读或写操作,表都被预先锁定,然后在持有表上的锁的同时,从旧索引构建新索引。在重新生成索引时,不允许对表执行读或写操作。只有当操作完成时,表上的锁才会被释放,并且再次允许读取和写入。
请注意,在SQL Server2012中,取消了对LOB的限制,请参阅Online Index Operations for indexes containing LOB columns。
发布于 2017-03-15 15:38:22
主要区别是:
1)离线索引重建比在线重建更快。
2) SQL Server联机索引重建期间需要额外的磁盘空间。
3)通过SQL Server联机索引重建获得的SQL Server锁。
发布于 2011-06-11 01:37:22
当涉及到锁定表时,联机索引重建的侵入性较小。离线重建会导致表的大量锁定,这可能会对试图在重建发生时访问数据库的事物造成严重的阻塞问题。
在脱机重新生成期间,表锁应用于索引操作期间。创建、重新生成或删除聚集索引、空间索引或XML索引,或者重新生成或删除非聚集索引的脱机索引操作,将获取表的架构修改(Sch-M)锁。这将阻止所有用户在操作期间访问基础表。创建非聚集索引的脱机索引操作将获取表的共享(S)锁。这将阻止对基础表的更新,但允许执行读取操作,如SELECT语句。
http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx
此外,在线索引重建是企业(或开发人员)版本的唯一功能。
https://stackoverflow.com/questions/6309614
复制相似问题