我正在运行一个非常基本的SQL查询(SQL Server 2016)。我从8个表的一些简单内部联接和左侧联接中提取了15列,这些联接上均带有WITH (NOLOCK)
。我的where子句正在检查一些字符串,uniqueidentifier和位值。存储过程没有计算,没有循环/游标/ case语句等。它非常简单。
由于某种原因,由于SQL调用超时,我们的应用程序间歇性冻结。当我在事件探查器中捕获呼叫并在SSMS中运行它时,它会在不到一秒的时间内运行,但是从应用程序中来看,它并不会完成。
但是,如果我在查询中写出一条ALTER命令并添加空白行并执行更改,问题就会消失,并且调用会立即运行。我所做的更改没有任何实质性意义,只是以某种方式更改查询的行为似乎可以解锁它。
有人知道这是什么原因吗?超时时我看不到任何锁。我在想可能是缓存了一个错误的执行计划?
唯一的奇怪之处是它是从旧的旧版应用程序运行的,这是我们最后的旧版asp应用程序。但这似乎与Web服务器或体系结构无关,而与数据库无关。