我知道类似的问题已经在这里提出过了,并且还有一些与实体框架有关,但我没有得到它们中的任何一个为我工作。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。 –