gpt4 book ai didi

.net - 仅当从应用程序运行时存储过程才会导致超时

转载 作者:行者123 更新时间:2023-12-02 10:09:37 26 4
gpt4 key购买 nike

我们遇到了 sp 问题。

我们有一个非常简单的 sp,其中包含一个声明的表和几个外部联接,最终返回 20 到 100 行。

由于查询此 sp 在生产和测试环境中都给我们带来了较差的性能,因此我们最近重写了它以提高效率,并在我们的测试环境中进行了彻底的测试,具有出色的性能。

我们将其发布到生产环境只是为了发现它仍然非常慢并且导致我们的 .NET 2.0 应用程序在调用时超时。

我们什么都不明白,就进入生产数据库的 Management Studio 并在那里运行 sp,它的执行时间不到 1 秒。

也就是说,当从我们的应用程序运行时,它非常慢并导致超时,而当从 Management Studio 运行时,它非常快,永远不会超过一秒钟。

任何熟悉 SQL Server 2005 的人都可以给我们一些关于此问题的提示吗?

最佳答案

我认为您的问题可能是“参数嗅探”。它是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

关于.net - 仅当从应用程序运行时存储过程才会导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/468605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com