【问题标题】:IQueryable timeout expiredIQueryable 超时已过期
【发布时间】:2017-07-20 10:11:36
【问题描述】:

我对数据库的查询有问题。 当我尝试下面的代码时,它工作 75 毫秒并返回空列表。一切正常。

var test1 = unit
    .PersonQualities.GetAll()
    .Where(qp => qp.QualityId == qualityId && qp.PersonId == targetPersonId)
    .ToList();

但是当我使用它时,它会工作 30 秒并返回超时过期异常:

var test2 = unit
    .PersonQualities.GetAll()
    .FirstOrDefault(qp => qp.QualityId == qualityId && qp.PersonId == targetPersonId);

我的 GetAll 方法:

public virtual IQueryable<T> GetAll()
{
    return Entities.AsQueryable();
}

请解释为什么会发生这种情况。我能做些什么来解决这个问题。谢谢。 附言我正在使用 SQL Server 2016 开发人员。这两个查询都适用于 SSMS。

分析器中的 FirstOrDefault 查询:

exec sp_executesql N'SELECT TOP (1) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Value] AS [Value], 
    [Extent1].[Percent] AS [Percent], 
    [Extent1].[IsLocked] AS [IsLocked], 
    [Extent1].[PersonId] AS [PersonId], 
    [Extent1].[QualityId] AS [QualityId]
    FROM [dbo].[PersonQuality] AS [Extent1]
    WHERE ([Extent1].[QualityId] = @p__linq__0) AND ([Extent1].[PersonId] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=110207,@p__linq__1=43257113

单或默认:

exec sp_executesql N'SELECT TOP (2) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Value] AS [Value], 
    [Extent1].[Percent] AS [Percent], 
    [Extent1].[IsLocked] AS [IsLocked], 
    [Extent1].[PersonId] AS [PersonId], 
    [Extent1].[QualityId] AS [QualityId]
    FROM [dbo].[PersonQuality] AS [Extent1]
    WHERE ([Extent1].[QualityId] = @p__linq__0) AND ([Extent1].[PersonId] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=110207,@p__linq__1=43257113

【问题讨论】:

  • 您是否尝试过直接在数据库服务器上运行查询?
  • @Jehof 不,我现在做不到(
  • SingleOrDefault 工作正常:\
  • 1.编辑您的问题以包含您正在使用的 哪种 风格的 SQL。 2. 在将查询具体化为对象之前,您可以通过在调试时检查代码来查看生成的 SQL 查询。
  • @J. Steen FirstOrDefault 是否立即实现对对象的请求?

标签: c# linq-to-entities sql-server-2016


【解决方案1】:

您可能需要更新统计信息并刷新查询缓存。

DBCC FLUSHPROCINDB

UPDATE STATISTICS

可能有帮助。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多