我知道類似的問題已經在這裏提出過了,並且還有一些與實體框架有關,但我沒有得到它們中的任何一個爲我工作。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作爲日期時間過去了,而不是作爲字符串但是這並沒有幫助和呼叫仍然超時。
http://stackoverflow.com/questions/250713/sqldataadapter-fill-method-slow –
這是一個很好的文章由Erland Sommarskog:[緩慢的應用程序,快速SSMS?]( http://www.sommarskog.se/query-plan-mysteries.html)這是一個很長的閱讀,但值得你的時間。它涵蓋了從@MicrosoftDN鏈接中提到的'SET'選項,以及許多其他內容。 – DMason
@MicrosoftDN。感謝您的鏈接。它有點奇怪,但是當我設置ARITHABORT關閉時,查詢在管理工作室中仍然需要3秒,但實際上在代碼中速度更快並且沒有超時發生。我在sp的開頭將ARITHABORT設置爲OFF,並在sp的結尾將其設置爲ON。 –