2010-05-11 129 views
1

我有一个由网站调用的用于显示数据的存储过程。今天,网页已经开始超时,所以我得到了剖析器,并看到这个查询耗时太长。然后,我使用相同的用户登录在管理工作室中运行相同的查询,并且返回的时间不到一秒。从网站调用时存储过程执行时间大于30秒,但从ssms调用时小于1秒

有没有什么明显的可能导致这个?我想不出为什么当ASP调用存储过程需要30秒,但是当我称它为好时。

感谢

+0

是否有很多并发进行?那么参数呢? – 2010-05-11 08:18:26

+0

SMSS是连接到本地实例还是同一个远程数据库?只是想知道是否查询返回的数据量会导致问题(例如,您不会在本地看到共享内存类型的连接)。 – Paolo 2010-05-11 08:21:32

+0

代码的样子是什么? – Paddy 2010-05-11 08:34:46

回答

0

它似乎是参数嗅探... 我已经停止了嗅探,将传入的参数分配给局部变量,现在似乎很好(即它再次从网站下运行) 。看看它是否保持这样或者会再次降级会很有趣。

我曾假定运行选项RECOMPILE会暂时'固定'查询有问题的参数嗅探问题,但它没有。

好啊。谢谢大家回答。我会看到会发生什么

+0

如果这最终成为答案,请确认后再接受。我提到它,因为你是新来的,欢迎! – SqlRyan 2010-05-11 08:57:19

1

我猜想,可能有两个原因:

  1. 网络问题
  2. 参数嗅探
-1

听起来像是一个死循环。

+0

不,它不!这会导致其中一个参与事务被回滚,并且您会收到一条错误消息,告诉您发生了死锁。 – 2010-05-11 09:05:39

1

这通常是因为Management Studio连接和ASP连接(如SET ARITHABORT)之间的某些SET-tings不同。这并不能解释为什么它只是从网站调用今天开始出现问题,但它有相当的机会。

+0

还有一些很好的答案在http://stackoverflow.com/questions/2736638/sql-query-slow-in-net-application-but-instantaneous-in-sql-server-management-stu/可能是相关的 – Rob 2010-05-11 08:42:09

+0

我不确定这是设置本身,可以解释速度差异?更通常的情况是,如果你改变这些设置之一,你将得到一个新的或不同的执行计划,所以它看起来像改变设置固定它,但实际上罪魁祸首是参数嗅探。 – 2010-05-11 09:08:59

+0

我也是用ARITHABORT来体验的。问题是查询计算列上的索引,当设置ARITHABORT时性能更好。 – devio 2010-05-11 20:20:51

0

我们的IVR有类似的问题 - 当我通过SSMS运行查询时,它立即返回,但是当它通过我们的IVR访问的web服务运行时,它会超过大约20时间百分比 - 真的很奇怪。

我结束了在运行SQL事件探查器查看所提交的查询,然后每个索引优化向导,其中第二每次下加快了IVR查询到的建议,增加了一些额外的指标。我怀疑这个问题也与参数有关,虽然我没有比较两个不同场地的执行计划,但我怀疑它们是完全不同的。不过,SQL Profiler将帮助您对此进行分类,因为您可以看到实际提交给引擎的查询以及用于提取数据的执行计划。

相关问题