在测试和开发环境中,我们遇到了一个问题,该函数有时会从.Net应用程序调用时运行得非常慢。当我们直接从Management
Studio调用此功能时,它可以正常工作。
剖析它们时的区别是:从应用程序:
CPU:906
读取:61853
写入:0
持续时间:926
从SSMS发送:
CPU:15次
读取:11243次
写入:0
持续时间:31
现在我们已经确定,当我们重新编译该函数时,性能将返回到期望的值,并且从应用程序运行时的性能配置文件与从SSMS运行时获得的性能配置文件相匹配。它会以随机间隔再次开始减速。
我们尚未在产品中看到这一点,但它们的部分原因可能是因为每周都会重新编译所有内容。
那么什么可能导致这种行为呢?
编辑-
我们终于能够解决这个问题,并重组变量以处理参数嗅探似乎已经解决了问题……我们在此处所做的一小段:感谢您的帮助。
-- create set of local variables for input parameters - this is to help performance - vis a vis "parameter sniffing"
declare @dtDate_Local datetime
,@vcPriceType_Local varchar(10)
,@iTradingStrategyID_Local int
,@iAccountID_Local int
,@vcSymbol_Local varchar(10)
,@vcTradeSymbol_Local varchar(10)
,@iDerivativeSymbolID_Local int
,@bExcludeZeroPriceTrades_Local bit
declare @dtMaxAggregatedDate smalldatetime
,@iSymbolID int
,@iDerivativePriceTypeID int
select @dtDate_Local = @dtDate
,@vcPriceType_Local = @vcPriceType
,@iTradingStrategyID_Local = @iTradingStrategyID
,@iAccountID_Local = @iAccountID
,@vcSymbol_Local = @vcSymbol
,@vcTradeSymbol_Local = @vcTradeSymbol
,@iDerivativeSymbolID_Local = @iDerivativeSymbolID
,@bExcludeZeroPriceTrades_Local = @bExcludeZeroPriceTrades
这通常是因为您在SSMS连接中获得了不同的执行计划。通常与参数嗅探问题相关,在该问题中,何时生成计划时使用的特定值对于参数的其他值而言是次最佳的。这也解释了为什么重新编译可以解决该问题。此线程似乎对SQL
Server中的参数嗅探(或欺骗)
有很好的解释。
问题内容: 我没有使用VB6进行很多编码,但是我现在正在更新现有的应用程序,并且遇到了一些麻烦。 我解决了这个问题。在VB6中,使用 LIKE* 时查询必须使用 % 通配符 ,但是在MS Access中,您必须使用 *通配符** 。 *** 我正在查询相同的数据库-(在MS Access中)。 在MS Access中进行查询时,以下查询有效: 当我在VB6中建立该查询时,我必须这样做: 发生了什么
在我的应用程序中,我以以下方式加载缓存。 加载用户缓存loadUserCache() 加载帐户缓存loadAccountCache() 加载客户缓存loadCustomerCache() 上述每个调用都涉及一个数据库调用。像怀斯一样,有6-7个电话。 当我的应用程序加载时,我必须等待缓存加载。 那些都是一个接一个的顺序调用。 如果我能找到一种方法并行地进行这些调用,那么应用程序加载期间的等待时间将
我目前试图控制静态功能运行时,例如单击静音,然后静音调用。目前,当添加或删除通道时,一切都在运行,但我的for lope根本不做任何事情。 我只是想控制您将在下面看到的代码何时在服务器端被调用,如果有意义的话,不需要添加或删除通道。 我使用的是express、AriJS客户端、JQuery和AsteriskAri。 有人能解释一下我是如何做到这一点的吗? 只需运行该函数,即静音阵列中的所有通道。
我试图调用ViewModel中片段中的函数,但每次调用时它都会崩溃,我不知道为什么。下面是代码: 呼吁协程: 函数的代码: 如果我不使用协同程序,只使用我收到一个错误,说我必须从其他挂起函数或协同程序调用这个函数。 这就是错误: 我的ViewModel是: 在我称之为协程的片段中,我这样声明它:
问题内容: 我想在SQL Server中创建调用函数,该函数接收两个参数并返回一个整数。当我调用存储过程时,我使用以下代码: 在这种情况下,我有一个由存储过程返回的表。如果我想使用返回标量值的函数而不是存储过程,会有什么变化? 问题答案: 您不能直接调用该函数,只是,( 查询 ),并且是允许的。由于您已经接触过存储过程,因此为什么不创建一个具有该功能的过程呢? 在您的C#代码中,您可以使用命令对象
我使用从iPython笔记本下载CSV时建议的代码动态构建javascript代码,并在从jupyter笔记本调用时使用python中的javascript()将其传递给浏览器。代码工作得很好。如果我在python函数中嵌入相同的代码,并从同一个jupyter笔记本调用python函数,那么python中的调用Javascript()将不再有效。如何使可重用功能正常工作? 我正在Windows 1