我有一个庞大而繁忙的生产数据库,我试图整理多年积累的索引并收回一些空间。但是我无法删除/禁用现有索引。它们都是非集群但是禁用失败并出现以下错误并且drop会锁定表,所以我在运行5分钟后最终取消该语句。
超出锁定请求超时时间。 (Microsoft SQL Server,错误:1222)
有什么想法吗?我确定我错过了一些非常明显的内容,但我认为非聚集索引只是元数据,所以应该快速轻松地删除。
ETA - 跟进问题 - 有没有办法可以手动将表锁定到Management Studio,以便快速运行?
答案 0 :(得分:0)
您没有提到RDBMS版本,但假设它是MS SQL SERVER 2012,则只允许对here中的聚簇索引进行DROP索引ONLINE而不使用表上的锁。
您尝试删除索引但有人正在使用该表,因此LOCK TIMEOUT会发生。我认为只有在没有人访问依赖表的情况下才能删除索引:
应用表锁,表在索引操作期间不可用。