这是一个有点尴尬的问题,我不敢相信我已经错过了这么多年。
我有一个包含 401 个堆表的供应商第三方数据库。我最近开始使用 Brent Ozar 的脚本并设置sp_BlitzFirst
为每 15 分钟运行一次以收集等待统计数据等。
它发现的是,每次运行 24 小时后,它都会告诉我修复转发记录。如果我跨 DMV 运行查询并返回一些包含超过 150,000 个转发记录值的表,这可能会让一些读者感到震惊。
我知道解决这个问题是在表中建立一个聚集索引,或者作为运行ALTER TABLE [tablename] REBUILD
.
然而,我无法找到的是这是否会使表脱机,以及在运行此命令之前是否应该注意任何其他问题。
我用的是2008 R2企业版,不知道这样运行会不会断电?
ALTER TABLE [tablename] REBUILD WITH (ONLINE = ON);
有人对这个有经验么?
好消息:150,000 条转发记录实际上并没有那么糟糕,这取决于我们谈论的时间跨度。只要服务器启动,就会跟踪转发的记录(在特定的 2012/2014 版本中有一些错误的陷阱。)
即使它在线工作,您的用户也可以注意到它,具体取决于您的 IO 吞吐量、表的大小、非聚集索引的数量和您的工作负载。
以下是我的处理方法: