【问题标题】:Entity Framework and inconsistent performance with processing the results of a query实体框架和处理查询结果的性能不一致
【发布时间】:2015-02-25 16:28:29
【问题描述】:

刚刚在我们的网站上设置了 New Relic,我们注意到我们的一个 webapi 调用中出现了一些奇怪的峰值。

此时,我将问题归结为单个 EF 查询,我将其移至其自己的方法,因此我可以使用 New Relic 对其进行检测..

该方法唯一要做的就是

//I changed this from ToListAsync to ToList to see if it would help
var result = Context.Data.Where(x=> x.id = id).ToList();
return result;

就是这样。。

使用 New Relic 并注销所有 SQL 查询我相当肯定问题不在于查询速度慢。 New Relic 表示,该方法平均只花费 339 毫秒对数据库运行,我从来自 EF 的跟踪数据中看到了类似的数字。但是这些方法的平均执行时间是 16 秒。

通常此方法在 2 秒内执行,但有时 EF 似乎只是进入 lala 领域,完成它正在做的任何事情都需要 60 或 70 秒。但我从未见过数据库查询本身花费的时间超过 500 毫秒。并且查询每次运行时都会检索几乎完全相同的数据集..

我在日志中注意到,在执行查询和关闭连接之间总是有很长的等待时间。这是日志的示例输出

  • 应用程序:2015-02-17T10:04:11 PID[3556] 信息 -- 在 6 毫秒内完成,结果:SqlDataReader 应用程序:应用程序:
  • 2015-02-17T10:04:11 PID[3556] 信息应用:应用:
  • 2015-02-17T10:04:22 PID[3556] 信息于 2/17/2015 10:04:22 AM +00:00 关闭连接

注意完成时间是 6 毫秒,但在关闭连接之前会有 11 秒的延迟

  • 我已尝试删除此调用的异步,但没有帮助
  • 我尝试在所有内容上使用 ConfigureAwait(false) 以查看尝试返回原始上下文是否存在问题
  • 我已经尝试自己手动管理连接。所以一开始就打开,最后关闭

这不可能来自负载,因为现在确实有 2 个用户对 Azure 站点进行 beta 测试...所以负载几乎不存在。

我尝试在本地重新创建它,但无法...而且我真的不确定从这里调试问题除了慢慢地去除 EF 部件以获得更简单的东西(如 Dapper)以查看是否行为更一致。

技术栈:

  • Sql Azure
  • Azure 网站扩展到两个实例
  • EF 6 异步功能
  • 网页接口

【问题讨论】:

    标签: entity-framework-6 azure-sql-database azure-web-app-service newrelic


    【解决方案1】:

    您使用的是哪个版本的 Sql Azure?

    我们在使用 Sql Azure Web 时遇到了类似的问题(即将停用的那个)

    我们有一个使用 Entity Framework 6 的查询,查询一个包含大约 700,000 行的表。在我的本地 sql 服务器上花了一秒钟 - 在 Sql Azure 上花了超过 1 分钟!更糟糕的是有时它甚至超时

    我的猜测是Sql azure web是一个共享的sql server,资源有限。

    【讨论】:

    • 我们在 S0 层...我今天将它移到 S1 层,看看是否有帮助,但它没有真正的.. 我认为它有事可做使用该表中的空间数据。我们正在努力优化和缓存我们现在可以做的事情,看看是否有帮助......
    • 根据我的阅读 (cbailiss.wordpress.com/2014/09/16/…) 对于大多数应用而言,S0 和可能的 S1 似乎速度较慢 - 但这取决于应用的性质。
    • 好吧,你的意思是一个 100% 的 avg_cpu_percent 持续一个小时是一件坏事吗? :-) 那里超级有用的链接,我想就是这样......在 S0/S1,我们可能正在通过空间查询来杀死 CPU......现在很酷,我有一些很好的工具可以主动监控并记录一些良好的使用数据看看我们的工作负载在哪里适合我们的层......我们也将很快在这里缓存所有东西,所以希望这可以让我们回到 S1..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多