我在SQL Server2005中遇到了一个问题,在SQL Server2005中,存储过程似乎随机挂起/锁定,并且从不返回任何结果。
存储过程所做的是调用一个函数,该函数将两个不同的函数合并在一起-返回相同类型的数据,但条件不同。没有什么进展。我不认为这是函数挂起的问题,因为还有其他SPROC调用相同的函数也没有问题,即使第一个函数已经锁定。
在SPROC挂起后,任何进一步调用它的尝试都将导致超时-不是在调用本身,但响应时间将太长,因为没有返回任何结果,代码将抛出异常。
在一个相对低负载的系统中,这种情况在两个月内至少发生了三次。重新启动SQL Server可以解决这种情况,但我不认为这是问题的“解决方案”。
我查找了一些信息,发现了一些关于查询缓存损坏的信息。然而,这是关于动态SQL字符串的,而我的问题不是这样。我猜它可能仍然是查询缓存。
有没有人遇到过同样的问题,如果有,你对此做了什么(不要说“每天早上重新启动SQL Server”; )?有没有办法调试这个问题,尝试找出到底哪里出了问题?我不能重现这个问题,但当它再次出现时,如果我知道在哪里仔细查看就好了。
我不认为这有什么不同,但为了记录,SPROC是从.NET 3.5代码中调用的,使用的是实体Franework。我说这没有什么不同,因为当我测试直接从SQL Server Management Studio执行SPROC时,也没有返回任何结果。
发布于 2010-02-04 19:18:38
发布于 2010-02-04 18:07:31
你的统计数据是最新的吗?缓存查询计划不正确的常见原因之一是统计信息过期。
您是否有定期计划的索引重建作业?
发布于 2010-02-04 19:12:51
您是否验证了SQL Server日志..?当然,问题的原因已记录在案。至少你可以从中得到一些提示。请检查一下。
这篇优秀的MSDN文章SQL Server technical bulletin - How to resolve a deadlock 非常详细地解释了识别和解决死锁问题所需的步骤。
https://stackoverflow.com/questions/2198758
复制相似问题