2011-08-29 96 views
2

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

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

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

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

我们已经尝试了以下内容:

  • 修改执行超时的web.config文件
  • 修改的web.config文件
  • 修改授权cookie超时sessionState超时网站上的代码

    • 修改SqlCommand超时对web.config文件
    • 修改了con在IIS上的网站性能nection超时
    • 修改于IIS
    • 应用程序池关闭时间限制托运的应用程序池空闲超时在IIS
    • 经过上的SQL Server性能的执行超时(它被设置为0,无限)
    • 与其他参数

    我们感谢所有帮助测试的存储过程直接在数据库上。

    Nirav

  • +1

    集ARITHABORT ON – SQLMenace

    +4

    [慢速的应用,快速的SSMS?了解性能秘诀](http://www.sommarskog.se/query-plan-mysteries.html) –

    +0

    当它只是挂你有没有检查知道你想要访问的表上的锁? –

    回答

    0

    我已经受够了,这是为用户提供搜索功能的存储过程同样的问题。我尝试了一切,包括ARTIHABORT等.SP加入了许多表格,因为用户可以搜索任何东西。 SP的许多参数都是可选的,这意味着SP中的默认值为NULL。没有工作。

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

    请注意,这是对SQL Server 2000中

    +0

    是的..我检查了所有的东西......仍然没有手枪...... – nirav

    0

    几年前我从SQL2000迁移一个应用程序来SQL2008的时候也有类似的问题。

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

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

    0

    超级超级晚的建议,但可能会来方便他人:一个典型的问题,我看到的和相当适用于Java是以下几点:

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

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

    exec spWhatever 'input' 
    exec spWhatever N'input' 
    

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

    干杯, 埃里克