我们有一个大约200-400个用户的应用程序,每天或每隔一天我们会遇到可怕的SQL异常:
“超时已过期。操作完成前经过的超时时间或服务器没有响应”。
一旦我们得到这个,那么它会针对不同的用户多次发生,然后所有用户都被卡住了。他们无法执行任何操作。
我没有完整的盒子规格,但我们有:
我们在SQL服务器日志中没有得到任何结果(正如预期的那样),我们的应用程序捕获了sqlexception,因此我们只看到了更新错误 - 在UPDATE上。在数据库中,我们只有几个关键表。超时发生在其中一行有30k行的表中。我们在这些查询上运行探查器,针对生产副本访问UI以获取大小,并确保我们拥有所有正确的索引(群集/非群集)。在本地环境(较小的盒子,相同大小的数据库)中,一切都快速运行,并且系统在一天中的大部分时间运行得很快。完全相同的查询(在生产中具有超时错误)在不到一秒的时间内运行。
我们确实将命令超时从30秒更改为300秒(我知道0是无限制的,我想我们应该使用它,但似乎只是掩盖了真正的问题)。
我们让分析器在生产中运行,但不幸的是它在上次发生时没有完全启用。我们现在正确设置它。
关于这可能是什么的任何想法?