0

我有一個存儲過程,我從我的ASP.NET網站執行。從網站,服務器立即服務30秒鐘的SQL查詢

需要30秒才能返回。當我運行SQL配置文件跟蹤時,我發現它確實需要30秒(所以滯後時間在Web服務器和數據庫之間)。

當我抓住跟蹤中的內容並在SQL Server本地執行它時,它是-instant-。

這是兩個查詢。第一個來自Web服務器(使用Entity Framework執行),第二個來自SQL Server Management Studio。

EventClass   TextData                              ApplicationName         CPU  Reads Writes Duration ClientProcessID SPID StartTime    EndTime 
RPC:Completed  exec sp_executesql N'FindQuestions @Query, @LocationId',N'@Query nvarchar(7),@LocationId int',@Query=N'what is',@LocationId=1 EntityFrameworkMUE        28330 146818 0  30063  2764   87  2014-02-12 19:42:00.933 2014-02-12 19:42:30.997 
SQL:BatchCompleted exec sp_executesql N'FindQuestions @Query, @LocationId',N'@Query nvarchar(7),@LocationId int',@Query=N'what is',@LocationId=1 Microsoft SQL Server Management Studio - Query 344  16604 0  385   22236   62  2014-02-12 19:42:57.803 2014-02-12 19:42:58.190  

任何想法?

+0

它可能[參數嗅探](https://www.simple-talk.com/sql/t-sql-programming/parameter-sniffing/)? –

回答

0

使用實體框架並不擅長生成最佳查詢。請致電this thread on SQL Server forum。清除SQL Server計劃緩存應該有所幫助。

+0

良好的實體框架不會產生任何東西,它只是調用一個存儲過程。但是,是的,清理計劃緩存工作。 – RPM1984

0

如果您在SQL查詢分析器中執行存儲過程>>需要多少時間?如果花費大於20秒,那麼您已經準備好了存儲過程中的問題。其次,如果小於< 10秒,則需要檢查Web服務器和數據庫服務器之間的連接性。

也希望能有正確的信息是

  1. Web和數據庫的本地系統上
  2. Web和數據庫不同,但本地系統上
  3. Web和數據庫上的不同,但服務器和試圖通過網絡打開網頁

所以可以準確地跟蹤問題的所在