据我们了解,与Server 2008及以上版本有关:
ALTER INDEX ... REORGANIZE
正在以各种类型的Server进行联机操作。
ALTER INDEX ... REBUILD
是阻塞操作,除非您有Server企业版.(即使使用Enterprise,在重新生成聚集索引时也会阻塞)
如果以上所述都是正确的,问题是:
在ALTER INDEX ... REORGANIZE
操作期间,表是否可用于读和写,还是被写入阻塞?
发布于 2014-09-24 12:22:30
在一个新的索引..。重新组织操作时,表是否可用于读和写,还是被写入阻止?
重新组织总是在线操作和单线程操作,但不包含阻塞锁。当您重新组织时,有allow_page_locks =ON or OFF
选项,如果您关闭这个值,可能会出现错误,比如索引不能被重新组织,因为它不能使用页面级别的锁,所以最好用选项allow_page_locks =ON
来重新组织索引。因此,是的表可用于读写操作,锁如选项中所指出的那样被接受,但正如我所说的,它不包含阻塞锁。
根据微软联机丛书
关闭页和行锁定可能是也可能不能接受,因为每周批处理更新将阻止并发读取器在更新运行时访问表。如果批处理作业只更改几行或几页,则可以更改锁定级别以允许行或页级别锁定,这将使其他会话能够在不阻塞的情况下从表中读取数据。如果批处理作业有大量更新,则获取表上的独占锁可能是确保批处理作业高效完成的最佳方法。
改变索引..。重构是一种阻塞操作,除非您有。(即使使用Enterprise,在重新生成聚集索引时也会阻塞)
即使是企业版中的索引重建也需要短期锁,因为根据保罗·兰德尔文章,在线索引操作需要采取两个非常短期的表锁。操作开始时使用S(共享)表锁,强制所有可能触及索引的写入计划重新编译;操作结束时使用SCH-M (模式修改)表锁,强制所有可能触及索引的读写计划重新编译。
https://dba.stackexchange.com/questions/77554
复制