SQL查询突然需要很长时间才能运行

Kev*_*vin 2 sql-server

我有一个应用程序正在处理来自 SQL 数据库的大量项目。它运行良好,然后在处理了大约 400 万个项目后,它开始挂断。

使用 SQL Server Profiler,我将问题追溯到一个查询,该查询的持续时间从大约 1,000 跳到了 2,000,000 的持续时间。

查询的简化版本如下所示:

select t.field1, t.field2 
from table1 t 
where t.id in (select top 1000 t2.id from table2 t2 where t2.id > XXXX order by t2.id)
Run Code Online (Sandbox Code Playgroud)

知道为什么突然执行需要这么长时间吗?

小智 7

这是一个过时统计的学校示例 - 查询运行良好,然后,没有任何明显的原因,变得非常缓慢。

当数据库正在使用并且发生许多事务时,SQL Server 统计信息变得不准确。

问题排查从分析慢查询开始。如果查询执行计划中的估计行数和实际行数之间的差异高于 10%,则统计信息已过时。性能将如何受到影响取决于查询和执行计划。相同的过时统计信息可能对两个不同的查询产生不同的影响。

没有动态管理视图可以指示不准确的统计信息,有时更新统计信息并查看是否有帮助比逐步分析情况更容易。

您可以在此处找到有关统计的更多信息:统计