重新构建HEAP是否会导致停机?


8

这是一个令人尴尬的问题,我不敢相信我已经错过这么多年了。

我有一个具有401堆表的供应商第三方数据库。我最近开始使用Brent Ozar的脚本并设置sp_BlitzFirst为每15分钟运行一次以收集等待统计信息等。

它所发现的是,每次运行24小时都在告诉我修复转发记录。可能使某些读者感到震惊的是,我对DMV进行了查询,并获得了一些表,这些表具有超过150,000个转发的记录值。

我知道解决此问题的方法是在表中使用聚集索引,或者作为运行时的临时解决方法ALTER TABLE [tablename] REBUILD

但是,我无法找到的是这是否使表脱机,以及在运行此命令之前是否应该注意其他问题。

我正在使用2008 R2企业版,并且不知道以这种方式运行它是否可以消除中断的需要?

ALTER TABLE [tablename] REBUILD WITH (ONLINE = ON);  

有人对这个有经验么?

Answers:


9

好消息:15万条转发记录实际上并不是那么糟糕,这取决于我们所讨论的时间跨度。只要服务器启动,就跟踪转发的记录(在特定的2012/2014版本中,围绕某个错误的一些陷阱)。

即使它确实可以在线工作,您的用户也会注意到它,具体取决于您的IO吞吐量,表的大小,非聚集索引的数量以及您的工作负载。

这是我的处理方法:

  • 列出具有转发记录警告的表(从最小到最大)(而不是转发的记录数)
  • 一次手动重建几个表。不要自动执行此操作-您想了解系统如何响应重建小表。如果您的服务器可以跟上,您将很快学会。
  • 密切注意您的事务日志使用情况。如果您的日志文件为10GB,并且您尝试重建50GB的堆,则可能会遇到问题。您可以通过在维护时段内提前注销并在执行此操作时进行频繁的日志备份来缓解这些问题-但老实说,几天内有15万条转发记录,我不会不必费心做这么多工作。
  • 展望未来,与供应商合作,将集群键放在这些表上。是的,有时候堆是合适的,但是如果您遇到转发记录问题,那么您可能就不会处于堆友好的情况之一。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.