存储过程间歇性地缓慢

时间:2014-09-08 14:39:31

标签: c# linq tsql stored-procedures

我使用linq来调用c#中的这个存储过程,并且通常需要大约1ms来运行,但每几百次调用中一次最终需要10-60秒。我认为这是一个参数嗅探问题所以我使用本地@_BuyerID来避免这种情况。我也尝试过添加“重新编译”选项'到最后,优化未知,没有运气。

ALTER PROCEDURE [dbo].[GetBuyerAddresses]
    @BuyerID INT
AS

DECLARE @_BuyerID INT
SET @_BuyerID = @BuyerID

SELECT
    Addresses.AddressID
FROM dbo.Buyers 
JOIN dbo.Addresses ON Buyers.BuyerID = Addresses.BuyerID
WHERE Buyers.BuyerID = @_BuyerID

我现在不确定在哪里集中我的搜索,参数嗅探似乎是缓慢存储过程最常见的问题,但这些解决方案似乎都不适用于我。

1 个答案:

答案 0 :(得分:0)

看起来你可以优化你的语句,以避免对Buyers表进行不必要的读取,并消除冗余的@_BuyerID。

这是我如何编写proc:

ALTER PROCEDURE [dbo].[GetBuyerAddresses]
    @BuyerID INT
AS

SELECT AddressID
FROM dbo.Addresses 
WHERE BuyerID = @BuyerID

第2部分:

考虑启用"异步自动更新统计信息"在这个数据库上。可能是Addresses表在查询之间发生了足够的变化,统计信息被认为是过时的,并且在缓慢响应的查询期间正在同步更新。在这种情况下,此设置将有所帮助。