2015-09-10 43 views
2

我知道類似的問題已經在這裏提出過了,並且還有一些與實體框架有關,但我沒有得到它們中的任何一個爲我工作。SQL查詢在代碼中超時,但在管理工作室中需要幾秒鐘

我有一個遺留代碼,它使用實體框架數據的第一種方法,並調用存儲過程,如;而如果我從分析器查詢和管理Studio中運行它,它只需3秒

var result = context.Database.SqlQuery<VoidEvent>("p_VoidEventSearchList @UserId, @EventTypeId, @StartDate, @EndDate, @ManagementArea, @ManagementArea2 " 
       , new SqlParameter("@UserId", UserId) 
       , new SqlParameter("@EventTypeId", EventTypeId) 
       , new SqlParameter("@StartDate", Convert.ToDateTime(StartDate)) 
       , new SqlParameter("@EndDate", Convert.ToDateTime(EndDate).AddDays(1)) 
       , new SqlParameter("@ManagementArea", ManagementArea) 
       , new SqlParameter("@ManagementArea2", ManagementArea2) 
       ).ToList(); 
      return result; 

這是拋出一個超時錯誤;

exec sp_executesql N'p_VoidEventSearchList @UserId, @EventTypeId, @StartDate, @EndDate, @ManagementArea, @ManagementArea2 ',N'@UserId nvarchar(36),@EventTypeId int,@StartDate datetime,@EndDate datetime,@ManagementArea nvarchar(4000),@ManagementArea2 nvarchar(4000)',@UserId=N'e91a860e-e04a-421c-8b0b-a4602aca1856',@EventTypeId=0,@StartDate='1753-01-01 00:00:00',@EndDate='9999-12-30 23:59:00',@ManagementArea=N'',@ManagementArea2=N'' 

存儲過程的參數是:

ALTER PROCEDURE [dbo].[p_VoidEventSearchList] 
    @UserId NVARCHAR(40) = '' 
    , @EventTypeId INT = 0 
    , @StartDate datetime--nvarchar(10) = '' 
    , @EndDate datetime--nvarchar(10) = '' 
    , @ManagementArea NVARCHAR(10) = '' 
    , @ManagementArea2 NVARCHAR(10) = '' 
AS 
BEGIN 

由於有些職位已經sugeested我已經確定了DATATIME作爲日期時間過去了,而不是作爲字符串但是這並沒有幫助和呼叫仍然超時。

+2

http://stackoverflow.com/questions/250713/sqldataadapter-fill-method-slow –

+0

這是一個很好的文章由Erland Sommarskog:[緩慢的應用程序,快速SSMS?]( http://www.sommarskog.se/query-plan-mysteries.html)這是一個很長的閱讀,但值得你的時間。它涵蓋了從@MicrosoftDN鏈接中提到的'SET'選項,以及許多其他內容。 – DMason

+0

@MicrosoftDN。感謝您的鏈接。它有點奇怪,但是當我設置ARITHABORT關閉時,查詢在管理工作室中仍然需要3秒,但實際上在代碼中速度更快並且沒有超時發生。我在sp的開頭將ARITHABORT設置爲OFF,並在sp的結尾將其設置爲ON。 –

回答

0

@MicrosoftDN。感謝您的鏈接。它有點奇怪,但是當我設置ARITHABORT關閉時,查詢在管理工作室中仍然需要3秒,但實際上在代碼中速度更快並且沒有超時發生。我在sp的開頭將ARITHABORT設置爲OFF,並在sp的結尾將其設置爲ON。

MSDN說:「將ARITHABORT設置爲OFF可以接收不同的查詢計劃,這使得難以排除性能不佳的查詢,也就是說,相同的查詢可以在管理工作室中快速執行,但在應用程序中速度很慢」,但在這種情況下,當我將它設置爲OFF時,它實際上比以前在代碼中運行得更快。我不知道這是爲什麼發生

1

SQL Server管理工作室和您的應用程序以不同的方式連接到SQL Server。 我會檢查你的.net應用程序中的連接字符串,看看是否有任何時髦的連接選項。另外,您的應用程序用來解析SQL Server的網絡路由也可能是超時的原因。

相關問題