【问题标题】:SQL connection timeoutSQL 连接超时
【发布时间】:2011-08-29 12:45:14
【问题描述】:

我们在我们的一个网站上遇到了奇怪的连接超时。

我们的环境由一个 IIS 7 Web 服务器(在 Windows Server 2008 R2 标准版上运行)和一个 SQL Server 2008 数据库服务器组成。

在调试引起超时的网站功能时,我们注意到连接本身需要几毫秒才能完成,但在数据库上调用存储过程的SqlCommand 在执行期间会挂起几分钟,然后引发超时例外。

另一方面,当我们直接在数据库上运行存储过程时,只需 2 秒即可正确完成执行。

我们已经尝试了以下方法:

  • 修改SqlCommand网站代码超时
  • 修改了web.config文件的执行超时
  • 修改了web.config 文件上的sessionState 超时
  • 修改了web.config 文件上的授权 cookie 超时
  • 修改了 IIS 上网站属性的连接超时
  • 修改了 IIS 上的应用程序池关闭时间限制
  • 检查 IIS 上的应用程序池空闲超时
  • 检查 SQL Server 属性的执行超时(设置为 0,无限制)
  • 使用其他参数直接在数据库上测试存储过程

我们感谢任何帮助。

尼拉夫

【问题讨论】:

  • 当它刚刚挂起时,您是否检查过您尝试访问的表上是否存在已知锁?
  • 是的..我检查了,没有锁。
  • 在 IIS 中不太可能是任何东西......事实上,Sql Server 在这两个上下文之间做了一些不同的事情。跟踪它、分析它、检测它。我敢打赌,您的应用程序和 SSMS 之间的安全信誉是不同的......我已经看到这会导致问题取决于 proc 的代码。

标签: asp.net sql-server connection-timeout


【解决方案1】:

对于作为用户搜索功能的存储过程,我也遇到过同样的问题。我尝试了一切,包括 ARTIHABORT 等。SP 加入了许多表,因为用户可以搜索任何内容。 SP 的许多参数都是可选的,这意味着它们在 SP 中的默认值为 NULL。没有任何效果。

我通过确保我的 ADO.NET 代码仅在用户选择值的位置添加参数来“修复”它。 SP 的执行时间从几分钟缩短到几秒钟。我假设当只有具有实际值的参数被传递给 SP 时,SQL Server 可以更好地处理执行计划。

请注意,这是针对 SQL Server 2000 的。

【讨论】:

    【解决方案2】:

    几年前,我在将应用程序从 SQL2000 迁移到 SQL2008 时遇到了类似的问题。

    我将OPTION (RECOMPILE) 添加到数据库中出现问题的所有存储过程的末尾。在我的情况下,它与对存储过程的调用之间非常不同的参数有关。强制 proc 重新编译将强制 SQL 提出新的执行计划,而不是尝试使用可能对新参数不是最佳的缓存版本。

    如果您还没有这样做,请检查您的索引。没有什么比缺少急需的索引更能扼杀数据库性能了。这是一个很好的链接 (http://sqlfool.com/2009/04/a-look-at-missing-indexes/) 查询将显示缺失的索引。

    【讨论】:

      【解决方案3】:

      超级超级迟到的建议,但对其他人可能会派上用场:我看到并相当适用于 Java 的一个典型问题如下:

      您有一个将字符串作为参数的查询。该字符串是数据库中 varchar(N) 列的搜索条件。但是,您将查询中的字符串参数作为 Unicode (nvarchar(N)) 提交。这将导致全表扫描并将每个字段值转换为 Unicode 以进行正确比较,以避免潜在的数据丢失(如果 SQL Server 将输入参数转换为非 Unicode,它可能会丢失信息)。

      简单测试:运行两次查询(为简单起见,我假设它是一个 SP):

      exec spWhatever 'input'
      exec spWhatever N'input'
      

      看看他们的行为。此外,您可能需要查看 SSMS 中活动监视器上的“最近昂贵的查询”部分并询问执行计划,以澄清情况。

      干杯, 埃里克

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 2021-05-12
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多