代码之家  ›  专栏  ›  技术社区  ›  Marcus L

存储过程挂起在SQL Server 2005中

  •  0
  • Marcus L  · 技术社区  · 15 年前

    我在SQL Server2005中遇到了一个问题,其中存储过程似乎是随机挂起/锁定的,并且从不返回任何结果。

    存储过程所做的是调用一个函数,该函数反过来使两个不同的函数联合起来,返回同一类型的数据,但条件不同。没有进展。我不认为函数挂起,因为有其他存储过程调用相同的函数时没有问题,即使第一个存储过程已锁定。

    存储过程挂起后,任何进一步尝试调用它都将导致超时,而不是调用本身,但响应时间将太长,因为没有返回任何结果,代码将引发异常。

    在相对低负荷的系统中,这种情况在两个月内至少发生了三次。重新启动SQL Server解决了这一问题,但我不认为这是问题的解决方案。

    我寻找了一些信息,发现了一些关于查询缓存损坏的信息。但是,这是关于动态SQL字符串的,而我的问题不是。我想它仍然可能是查询缓存。

    是否有人遇到过同样的问题,如果有,您对此做了什么(不要说“每天早上重新启动SQL Server”)?是否有任何调试问题的方法来尝试找出问题的确切位置和原因?我无法重现这个问题,但当它再次出现时,如果我知道到哪里去仔细观察,那就更好了。

    我不认为这有什么区别,但就记录而言,存储过程是使用实体franework从.NET 3.5代码调用的。我说这没什么区别,因为当我测试直接从SQL Server Management Studio执行存储过程时,也不会返回任何结果。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    8 年前

    很可能是参数嗅探

    重新启动SQL Server将清除计划缓存。如果重新生成统计信息或索引,问题也将消失,“alter index”和“sp_updatestats”

    我建议使用“参数屏蔽”(不使用重新编译!)绕过它

    所以我已经回答了:

        2
  •  2
  •   Mitch Wheat    15 年前

    你的统计数据是最新的吗?缓存查询计划不正确的一个常见原因是过时的统计信息。

    是否有定期计划的索引重建作业?

        3
  •  0
  •   RameshVel    15 年前

    是否验证了SQL Server日志..?请务必记录问题的原因。至少你能得到一些提示。请检查一下。

    这篇优秀的MSDN文章 SQL Server technical bulletin - How to resolve a deadlock 详细说明了识别和解决死锁问题所需的步骤。