这很奇怪,但我希望有人可以帮助我。
我有一个存储过程调用,运行大约需要42秒 - 从通过ODBC连接连接的应用程序调用时。但是,如果我在SSMS(Sql Server Management Studio)中运行相同的调用,则只需要10或15秒即可执行跟踪记录的....
这似乎不是网络问题。我只将大约1200条记录传回给客户端 - 无论如何,我给你的时间直接来自跟踪持续时间字段......所以它使SQL Server需要3到4倍的时间来处理同一个呼叫 - 当时通过ODBC调用完成。我可以一遍又一遍地重现这个。更有趣的是,对于ODBC调用,读取和写入(取自跟踪)略高,但CPU使用率是SSMS调用的3或4倍。
还有其他存储过程作为同一过程的一部分被调用,并且它们似乎不会以相同的方式受到影响......或者至少不会受到相同程度的影响。
我们正在使用SQL Server 2005
关于这里发生了什么的任何想法?
答案 0 :(得分:1)
可能是您从SSMS中的“温暖”缓存中提取数据。尝试在SSMS中存储的proc调用之前使用这些行运行它,看看它是否运行得很快:
CHECKPOINT
GO
DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO
-- Your SQL begins here
正如@Martin所说,它也可能是参数嗅探的结果。 Here is a good SO post越过那个。
答案 1 :(得分:0)
听起来像 第一次连接 时间。你可以用两个电话重现这个问题吗?可能还值得与另一个图书馆计时,以查看它是否不同。