【发布时间】:2011-09-23 03:50:01
【问题描述】:
所以我在一个 10 年历史的系统上使用带有 .net 3.5 Web 前端的大型数据库 (30 gig) sql 2005。它有新的和旧的位
我们遇到了一个越来越频繁发生的问题。
一个存储过程(到目前为止,我们已经有 4 个不同的过程)决定它会超时。调用是从网络服务器发生的,并达到 30 秒超时并记录到我们的错误日志中。该网站使用单一登录(我知道这是错误的,但由于遗留代码无法更改)。
就在这之后,我运行了完全相同的呼叫,它需要(以我身份登录)1 秒。
问题仍然存在于这个存储过程中,直到我们删除并重新创建它,得到大量超时。每个 sp 调用都有不同的参数。 就像获取与当前用户有关的所有未签名班次一样,因此当前用户作为参数传入
解决方案有效,但我真的不明白为什么。
我们的发布周期为两周,在此期间随时都会出现此错误。它发生在发布一周后的第二天,最后一次是发布后 12 天。
在每个版本中,我们对所有存储的 procs/triggers/functions/views 进行 SQL 多脚本处理,每次删除和重新创建自身。
我能想到的是存储过程执行计划已损坏/出错,删除重新创建它可以清除这一点。
我正在考虑调用sps WITH RECOMPILE 选项,这是一个禁忌吗?或可接受的方式
【问题讨论】:
-
今天遇到了同样的问题,非常棘手。执行更改语句而不进行更改也对我有所帮助。
标签: sql database timeout database-administration