Sql server 执行存储过程时SQL Server超时

Sql server 执行存储过程时SQL Server超时,sql-server,ado.net,timeout,command-timeout,Sql Server,Ado.net,Timeout,Command Timeout,我遇到一个问题,执行存储过程更新表中的记录会导致超时错误。我最初从MVC3应用程序中调用存储过程,这是我第一次注意到错误的地方 但是,使用SQL Server Profiler,我能够复制ADO.NET生成的代码,并直接在数据库上运行它。我让这个查询运行了大约5分钟,但它仍然没有返回任何内容 以下是一些事实: 存储过程大约有100个参数被传递给它 我的MVC应用程序、SSMS和Sql Server 2008都安装在同一台机器上 存储过程尝试更新包含大约5000个条目的表中的一行 有一个触发器将更

我遇到一个问题,执行存储过程更新表中的记录会导致超时错误。我最初从MVC3应用程序中调用存储过程,这是我第一次注意到错误的地方

但是,使用SQL Server Profiler,我能够复制ADO.NET生成的代码,并直接在数据库上运行它。我让这个查询运行了大约5分钟,但它仍然没有返回任何内容

以下是一些事实:


  • 存储过程大约有100个参数被传递给它

  • 我的MVC应用程序、SSMS和Sql Server 2008都安装在同一台机器上

  • 存储过程尝试更新包含大约5000个条目的表中的一行

  • 有一个触发器将更新
    LastModifiedDate
    CreatedDate
    ,但我删除了这些触发器,并更新了EDMX以确定是否存在由这些触发器引起的无限循环

  • 我们的live server运行的存储过程与我尝试运行的存储过程完全相同(使用经典asp),并获得正确的结果。此外,live server无法在.NET下运行相同的存储过程

  • 我的计算机无法运行经典ASP和ASP.NET的存储过程

  • 存储过程似乎只在少数行中失败,而其他行则工作得很好

  • 我已尝试更改传递到存储过程中的参数值

  • 其他存储过程工作正常

  • 存储过程试图更新的特定表上似乎有一个锁,因为即使在等待执行这个查询时,执行其他查询也可以正常工作

  • 如果有人对我可以执行的任何其他测试有任何想法,或者我可以使用任何工具来确定超时错误的根本原因

    谢谢


    另外,不要告诉我更改命令超时属性,我已尝试将其设置为零

    我能想到两件事:

  • 我假设您已经在存储过程中实现了异常处理。如果没有,请这样做,并尝试先抓住问题陈述。当你说,某些行发生这种情况时,可能是因为坏的数据?有关如何在SQL Server 2008中执行异常处理的信息,请阅读

  • 你有没有试着找出是否有死锁? 请阅读详细的程序和理解


  • 谢谢,我现在将研究这些资源。我不知道SQL处理了异常我将死锁图事件添加到SQL Server探查器中,但我没有看到该事件。我有什么遗漏吗?我删除了batch completed和batch started事件类,并添加了死锁图事件。我已经离开存储过程2分钟了,但没有出现任何内容。这是否意味着SQL Server无法检测任何死锁?此外,我刚刚检查了日志,在日志中找不到任何相关条目。您是否首先尝试捕获异常?找到什么了吗?您可以发布一些代码来更好地理解吗?我不能发布,但它是一个相当标准的存储过程。它检查其中一个输入参数的值是否为01/01/1900。如果是,则将参数设置为null。然后检查是否有此客户的任何许可证信息。如果不是,它会将一些许可证信息插入表X中。然后它会继续更新表Y。如果客户的active值不是“Z”,则更新表YI的active字段。表YI与表有相同的问题,其中has column type是hierarchyid。“存储过程有大约100个传递给它的参数。”哦?!?无法想象一个过程在不违反单一责任原则的情况下获得100个参数的情况。如果一个存储过程更新了一个包含100列的表中的行,该情况会怎样?^如果包含100列,我可能会以逗号分隔格式将其作为单个参数发送。