MS SQL索引重建修复超时问题

3
我们有一个相当复杂的MS SQL查询,涉及到多个表的连接。它的目的是搜索特定类型的实体。我们最近花了一些时间对其进行优化,并设置了正确的索引。
但是在某些时候(没有注意到任何规则,因此似乎是任意的),当使用此查询时,Web应用程序开始超时。然后我们可以进入数据库并重建SQL中包含的2个表的索引,然后它就恢复正常了……这种情况偶尔发生。
现在请原谅我的无知,MSSQL是否应该在最佳时间自动重建索引? 否则,我们需要安排索引维护运行一次,一旦达到一定的碎片程度? 请随意忽略我的问题,并指导我朝正确的方向前进。
提前感谢。

也许表格统计数据失效了?当索引字段具有“倾斜”的值分布时,这种情况可能会发生——例如50%的记录具有相同的值,而另外50%则全不相同——并且添加记录时没有遵循相同的模式。重新构建索引可以重新创建统计数据,但更简单的方法是使用'update statistics mytable with fullscan'命令。SQL服务器本身会自动更新表格的统计数据(如果未禁用),但它不会使用所有记录进行抽样;这个'fullscan'提示强制对所有数据进行抽样。 - undefined
下次出现问题时,我会尝试只运行UPDATE STATISTICS mytable。或者还有其他方法来分析表的统计数据是否失效,比如查看日志吗? - undefined
请查看由Ola Hallengren撰写的出色索引维护文章。 - undefined
1
MSSQL在最佳时机自动重建索引吗? - 不会。它根据启发式阈值自动更新统计信息。您需要实施维护计划(标准的数据库管理员常规操作)。 - undefined
1个回答

1

生产系统应该定期进行统计维护,可能还需要一些较少频繁的索引维护。

由于SQL Server(目前)不会自动为您执行此操作,因此请实施Ola Hallegren的索引和统计维护脚本。数据库管理员使用这些脚本。

我过去每周重建索引,但现在更喜欢每晚更新统计信息,并进行较少频繁的索引重建。

我实施了每周重建所有碎片化索引(> 50%),并在必要时每晚执行任务来维护使用频繁(且频繁插入数据)的表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接