2

我们有一个拥有大约 200-400 名用户的应用程序,每天或每隔一天我们会遇到可怕的 sql 异常:

“超时已过期。在操作完成之前超时时间已过或服务器没有响应”。

一旦我们得到这个,它就会为不同的用户发生几次,然后所有用户都被卡住了。他们不能执行任何操作。

我面前没有盒子的完整规格,但我们有:

  • IIS 和 SQL Server 在不同的机器上运行
  • 每个盒子都有 64gb 多核内存

我们在 SQL 服务器日志中一无所获(正如预期的那样),并且我们的应用程序捕获了 sqlexception,因此我们只看到那里的超时错误 - 在 UPDATE 上。在数据库中,我们只有几个关键表。超时发生在有 30k 行的表之一上。我们已经对这些查询运行分析器,针对生产副本访问 UI 以获取大小,并确保我们拥有所有正确的索引(集群/非集群)。在本地环境(较小的盒子,相同大小的数据库)中,一切都运行得很快,对于用户来说,系统在一天中的大部分时间都运行得很快。完全相同的查询(在生产中出现超时错误)在不到一秒的时间内运行。

我们确实将命令超时从 30 秒更改为 300 秒(我知道 0 是无限的,我想我们应该使用它,但这似乎只是掩盖了真正的问题)。

我们在生产环境中运行了探查器,但不幸的是,它在上次发生时并没有完全启用。我们现在正在正确设置它。

关于这可能是什么的任何想法?

4

0 回答 0