2

我们在我们的一个网站上一直面临着奇怪的连接超时。

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

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

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

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

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

我们感谢任何帮助。

尼拉夫

4

3 回答 3

0

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

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

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

于 2011-12-06T07:10:13.490 回答
0

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

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

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

于 2011-08-29T16:20:49.430 回答
0

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

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

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

exec spWhatever 'input'
exec spWhatever N'input'

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

干杯,埃里克

于 2013-04-25T03:47:22.210 回答