SQL Server 2016中的随机慢速查询性能

SQL Server 2016中的随机慢速查询性能,sql,performance,sql-server-2016,sql-server-profiler,Sql,Performance,Sql Server 2016,Sql Server Profiler,我会看看你有什么问题 SELECT SUM(A.POSTEDQTY), SUM(A.POSTEDVALUE), SUM(A.PHYSICALVALUE), SUM(A.DEDUCTED), SUM(A.RECEIVED), SUM(A.RESERVPHYSICAL), SUM(A.RESERVORDERED), SUM(A.REGISTERED), SUM(A.PICKED), SUM(A.ONORDER),

我会看看你有什么问题

SELECT 
    SUM(A.POSTEDQTY),
    SUM(A.POSTEDVALUE),
    SUM(A.PHYSICALVALUE),
    SUM(A.DEDUCTED),
    SUM(A.RECEIVED),
    SUM(A.RESERVPHYSICAL),
    SUM(A.RESERVORDERED),
    SUM(A.REGISTERED),
    SUM(A.PICKED), 
    SUM(A.ONORDER),
    SUM(A.ORDERED),
    SUM(A.ARRIVED),
    SUM(A.QUOTATIONRECEIPT),
    SUM(A.QUOTATIONISSUE),
    SUM(A.AVAILPHYSICAL),
    SUM(A.AVAILORDERED),
    SUM(A.PHYSICALINVENT) 
FROM 
    INVENTSUM A WITH(NOLOCK) 
WHERE 
    ((A.DATAAREAID = @P1) 
    AND ((A.ITEMID = @P2) 
    AND (A.CLOSED = @P3))) 
    AND EXISTS (SELECT 'x' FROM INVENTDIM B WITH (NOLOCK) 
                WHERE ((B.DATAAREAID = @P4) 
                  AND ((((B.INVENTDIMID = A.INVENTDIMID) AND (B.CONFIGID = @P5)) 
                  AND (B.INVENTLOCATIONID = @P6)) AND (B.INVENTBATCHID = @P7))))
在SQLServerProfiler中,您可以看到相同的查询在0毫秒或超过10000毫秒的时间内执行

如果我尝试用相同的参数直接执行相同的查询10000ms,则需要0ms

发生了什么事


谢谢!!:

第一次执行查询时,db引擎必须准备语句send to db search数据并返回结果。第二次语句已经准备好并且数据在缓存中。这就是为什么第二次跑步总是更快的原因


不要让我们读取您的分析器输出。获取正在执行的代码并将其放在您的帖子中,而不是使用4个图像和链接。谢谢!编辑!:您需要获得执行计划这也可能是您遇到的问题。但是同一个查询执行了很多次,首先执行正常,然后是性能差,好了之后,这是一个随机问题,我无法理解。另一个原因通常是磁盘速度慢。
declare @p2 int
set @p2=180157421
declare @p3 int
set @p3=16
declare @p4 int
set @p4=1
declare @p5 int
set @p5=1
exec sp_cursorexecute 1073741895,@p2 output,@p3 output,@p4 output,@p5 output,N'ens',N'V89710821',0,N'ens',N'PO16628',N'AS',N'OFS028748'
select @p2, @p3, @p4, @p5
SELECT SUM(A.POSTEDQTY),SUM(A.POSTEDVALUE),SUM(A.PHYSICALVALUE),SUM(A.DEDUCTED),SUM(A.RECEIVED),SUM(A.RESERVPHYSICAL),SUM(A.RESERVORDERED),SUM(A.REGISTERED),SUM(A.PICKED),SUM(A.ONORDER),SUM(A.ORDERED),SUM(A.ARRIVED),SUM(A.QUOTATIONRECEIPT),SUM(A.QUOTATIONISSUE),SUM(A.AVAILPHYSICAL),SUM(A.AVAILORDERED),SUM(A.PHYSICALINVENT) FROM INVENTSUMDELTA A WHERE ((A.DATAAREAID=@P1) AND (((A.ITEMID=@P2) AND (A.ISAGGREGATED=@P3)) AND (A.TTSID=@P4))) AND EXISTS (SELECT 'x' FROM INVENTDIM B WHERE ((B.DATAAREAID=@P5) AND ((((B.INVENTDIMID=A.INVENTDIMID) AND (B.CONFIGID=@P6)) AND (B.INVENTLOCATIONID=@P7)) AND (B.INVENTBATCHID=@P8))))
declare @p2 int
set @p2=180157423
declare @p3 int
set @p3=16
declare @p4 int
set @p4=1
declare @p5 int
set @p5=1
exec sp_cursorexecute 1073741904,@p2 output,@p3 output,@p4 output,@p5 output,N'ens',N'V89710821',0,5666550353,N'ens',N'PO16628',N'AS',N'OFS028748'
select @p2, @p3, @p4, @p5