缓慢地运行一个总是运行得很快的查询

Ari*_*ian -3 sql-server sql-server-2014

我有两个表,99% 的操作都是简单的选择。我们很少有插入/删除和更新。

这些表上有一个内连接,查询的执行计划是索引查找。99% 的情况下,查询运行得非常快(大约 1 秒)。但有时查询需要 30 秒才能运行。

没有任何模式表明这件事发生的时间。有一次这种情况发生在“12 月 1 日凌晨 3:17:20”。一次是“12 月 8 日晚上 10:13:43”。有一次发生在“12 月 11 日下午 16:50:43”。

我怎样才能找到这个问题从何而来的线索?

SQL Server 是否有记录所有事件的工具?

我的查询只有简单的 where 子句:where id = @id

Joe*_*ish 7

SQL Server 2014 没有提供很多选项来调查过去运行的查询的不良性能。您可以尝试检查错误日志,看看在缓慢的查询执行附近是否发生了任何灾难性事件。例如,也许有一个长 I/O 花费了超过 15 秒。您还可以检查系统运行状况扩展事件。例如,在缓慢的查询执行附近可能发生了长时间的锁定等待(>30 秒)。

听起来您真正需要的是增加应用程序日志记录(您已经知道错误发生时的精确秒数,因此请考虑在查询运行时间超过预期时记录性能信息)、购买 SQL Server 监控工具(例如 SentryOne)或升级到 SQL Server 2017 并查看查询存储等待统计信息。您应该知道,即使使用许多这样的工具,调查一年前发生的性能问题也会很困难。