我正在尝试在我维护的 Web 应用程序中调试 SQL 超时的来源。我有后面的 C# 代码的源代码,所以我确切地知道正在运行什么代码。我已将应用程序调试到执行超时的 SQL 代码的行,并观察 SQL 探查器中运行的查询。
从 Web 执行此查询时,它会在 30 秒后超时。但是,当我完全按照 Profiler 中的方式剪切/粘贴查询并将其放入 SSMS 并运行它时,它几乎会立即返回。我已经将问题追溯到在网络正在使用的连接中将 ARITHABORT 设置为 OFF(也就是说,如果我在 SSMS 会话中将 ARITHABORT 关闭,它会运行很长时间,如果我将其重新打开,那么它会运行很快)。但是,阅读 ARITHABORT 的描述,它似乎并不适用......我只是在做一个简单的 SELECT,根本没有执行任何算术运算......只有一个带有 WHERE 条件的 INNER JOIN:
为什么 ARITHABORT OFF 在这种情况下会导致这种行为?有什么方法可以从 SSMS 更改该连接的 ARITHABORT 设置?我正在使用 SQL Server 2008。