2015-09-10 13 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的网络路由也可能是超时的原因。

相关问题