【问题标题】:SqlException Execution Timeout Expired when executing lightweight querySqlException Execution Timeout 执行轻量级查询时过期
【发布时间】:2018-03-02 17:55:48
【问题描述】:

我看到一个非常奇怪的超时异常,这似乎是一个非常轻量级的查询,我不知道为什么。

查询看起来像这样

var locationId = 9;

var quantities = db.OrderDetails
                   .Where(d => d.ANullableDate == null
                               && d.Order.LocationId == locationId 
                               && d.AnotherNullabelDate == null
                               && d.ABooleanValue)
                   .Select(d => new { d.SkuId, d.Quantity })
                   .GroupBy(d => d.SkuId)
                   .ToList()
                   .ToDictionary(grp => grp.Key, grp => grp.Sum(x => x.Quantity));

关于此的几点说明:

  • 当 locationId 不是 9 时可以正常工作
  • 昨天运行良好。
  • 这在我的机器上运行正常。
  • 当我将机器配置为使用 azure 中的数据库时,它在我的机器上运行正常。
  • 如果我从 Azure 门户中提取与此查询相关的原始 SQL 并直接针对 Azure DB 运行它,它可以正常工作。
  • 与其他未失败的查询相比,此查询要简单得多,并且使用的数据要少得多。
  • 我通过可以找到“https://docs.microsoft.com/en-us/azure/sql-database/sql-database-connectivity-issues”的查询搜索了问题事件,但在问题发生期间没有出现任何问题。
  • 如果您对SelectToList 调用感到好奇,我在听说此问题后尝试了它们(它们没有工作)。

我完全不知道这可能是什么问题。我应该寻找什么?

更新:

它现在正在工作。在它再次开始工作之前我做的最后一件事是将数据库从 S4 降级到 S3(我这样做是因为 S4 配置处于公共预览版中)。

将其缩放回 S4 并没有导致问题再次发生,所以我不能真正假设缩放是修复它的原因。我仍然不知道出了什么问题。

【问题讨论】:

  • 我喜欢“在我的机器上工作”和“昨天工作”,这就是我们的日常:)。无论如何,你检查过 ToList() 之前生成的 sql 查询吗?也许您可以在那里找到一些东西,也可以拆分查询并评估每个部分以查看哪些有效,哪些无效。

标签: c# entity-framework-6 azure-sql-database


【解决方案1】:

该记录可能被未打开的事务阻塞。当您扩大/缩小层时,打开的事务将回滚。现在记录没有数据修改锁了。

【讨论】:

  • 在那种情况下,为什么其他查询有效,甚至在查询不同位置时,甚至是同一个查询?
  • 这取决于所涉及的锁的类型以及它们之间的兼容性。只是一个例子stackoverflow.com/questions/49057593/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多