当前位置:  开发笔记 > 编程语言 > 正文

存储过程仅在从应用程序运行时导致超时

如何解决《存储过程仅在从应用程序运行时导致超时》经验,为你挑选了1个好方法。

我们遇到了sp的问题.

我们有一个非常简单的sp,它包含一个声明的表和几个外连接,最后返回20到100行.

因为查询这个sp一直给我们在生产和测试环境中表现不佳,所以我们最近重新编写了它以提高效率,并且在我们的测试环境中进行了彻底的测试.

我们将它发布到生产中只是为了发现它仍然很慢并导致我们的.NET 2.0应用程序在调用时超时.

我们什么都不懂,在生产数据库上进入Management Studio并在那里运行sp,它在1秒内执行.

也就是说,当从我们的应用程序运行时,它极其缓慢并导致超时,当从Management Studio运行时它非常快并且从不需要超过一秒钟.

任何对SQL Server 2005有深入了解的人都能给我们一个暗示吗?



1> Christian80..:

我认为你的问题可能是"参数嗅探".这是SQL Server的执行环境在编译或重新编译期间"嗅探"sp的参数值以生成更快的执行计划的过程.但有时它会得到参数的组合,这些参数与sp将返回的当前数据一起构成一个非常慢的sp.

那里有几个很好的解释.在Stackoverflow上搜索.这是一个很好的:http: //omnibuzz-sql.blogspot.com/2006/11/parameter-sniffing-stored-procedures.html

一种可能的解决方案是在sp中创建局部变量并将传入的参数值设置为它们.然后只使用sp中的局部变量.

CREATE PROCEDURE [dbo].spTest
  @FromDate as DATETIME
AS
BEGIN
  DECLARE @FromDate_local as DATETIME
  SET @FromDate_local = '2009-01-01'

  SET @FromDate_local = @FromDate
  ...
  SELECT * FROM TestTbl WHERE FromDate >= @FromDate_local
END

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有